函数的作用域
定义
一个变量的可见范围叫做这个变量的作用域
python是一个非块级作用域的语言
>>> for i in range(10):
... name = i
...
>>> print(name)
9
>>> print(i)
9
这里变量是在for循环中定义的,但是循环结束之后这些变量仍然可以继续使用。这就是非块级作用域的语言。
全局作用域
>>> x = 1
>>> def inc():
... x += 1
...
>>> inc()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in inc
UnboundLocalError: local variable 'x' referenced before assignment
这里报错的原因是变量x并没有被事先声明。
这就是作用域的关系了,x是在函数的外部被定义的,因此x也被称为全局变量,在函数内部是看不到x的。
函数内部是一个局部的作用域,不能直接使用全局作用域中的变量x。
但是当我们直接print时是可以用的,(不能使用x来进行运算),如下:
>>> x = 1
>>> def fn():
... print(x)
...
>>> fn()
1
这是因为每个程序都由一个全局作用域,而在全局作用域里的局部作用域会随着我们层次的变深出现多个局部作用域。
局部作用域
>>> def fn():
... xx = 1
... print(xx)
...
>>> fn()
1
>>> print(xx)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'xx'