一、函数返回值注意点:
1. 函数如果没有返回值,会默认返回一个None
def demo1(): pass a = demo1() print(a)
2.如果返回多个值,会返回一个元组
def demo1(): return 1,"asd",3 a = demo1() print(a)
二、函数的作用域:
规则:LEGB
Python中作用域有四种情况:
L:Local ,局部作用域,函数中定义的变量
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的
G: global ,模块级别定义的全局变量
B: Build-in ,系统固定模块里的变量, 如int bytearray……
查找顺序是LEGB 和C没什么区别
函数中不能修改全局变量?存疑》
count = 10 def demo(): print(count) count = 5
以下代码会爆出错误 local variable 'count' referenced before assignment
意思是局部变量count在赋值之前就被引用了
一种说法是第一句print执行后,count已经指示为全局变量count,第二句修改全局变量导致报错
还有一种说法是如报错所言是因为print执行时找到了count,但是赋值之前引用的
我个人倾向于第二种说法,暂且存疑,再看下面代码:
def demo(): print(count) count = 5
代码中没有全局变量count,报错依然是 local variable 'count' referenced before assignment,算是证明第二种吧
也有可能是双重错误?
总之Python中若想修改全局变量,需要加上关键字,global
count = 10 def demo(): global count print(count) count = 5 demo() print(count)还有类似的关键字nonlocal对应的enclosing和loacal