在Python中,什么是全局声明?
什么是全球声明 ? 它是如何使用的? 我读过Python的官方定义;
然而,这对我来说并没有多大意义。
python中的每个“变量”都被限制在一定范围内。 python“文件”的范围是模块范围。 考虑以下:
#file test.py
myvariable = 5 # myvariable has module-level scope
def func():
x = 3 # x has "local" or function level scope.
具有局部作用域的对象只要函数退出并且永远不会被检索(除非您return
它们),但在函数内,您可以访问模块级作用域(或任何包含作用域)中的变量:
myvariable = 5
def func():
print(myvariable) # prints 5
def func2():
x = 3
def func3():
print(x) # will print 3 because it picks it up from `func2`'s scope
func3()
但是,您不能在该引用上使用赋值,并期望它将传播到外部作用域:
myvariable = 5
def func():
myvariable = 6 # creates a new "local" variable.
# Doesn't affect the global version
print(myvariable) # prints 6
func()
print(myvariable) # prints 5
现在,我们终于走向global
。 global
关键字是你告诉python你的函数中的一个特定变量是在全局(模块级)范围内定义的方式。
myvariable = 5
def func():
global myvariable
myvariable = 6 # changes `myvariable` at the global scope
print(myvariable) # prints 6
func()
print(myvariable) # prints 6 now because we were able
# to modify the reference in the function
换句话说,如果使用global
关键字,则可以在func
内更改模块范围中myvariable
的值。
顺便说一下,范围可以任意嵌套:
def func1():
x = 3
def func2():
print("x=",x,"func2")
y = 4
def func3():
nonlocal x # try it with nonlocal commented out as well. See the difference.
print("x=",x,"func3")
print("y=",y,"func3")
z = 5
print("z=",z,"func3")
x = 10
func3()
func2()
print("x=",x,"func1")
func1()
现在在这种情况下,没有一个变量在全局范围内声明,并且在python2中,没有(简单/干净)的方式在func3
更改func1
范围内的x
的值。 这就是为什么nonlocal
关键字在python3.x介绍。 nonlocal
是global
的扩展,它允许你修改从另一个范围中取出的变量,这个变量是从任何范围中取出的。
mgilson做得很好,但我想补充一些。
list1 = [1]
list2 = [1]
def main():
list1.append(3)
#list1 = [9]
list2 = [222]
print list1, list2
print "before main():", list1, list2
>>> [1] [1]
main()
>>> [1,3] [222]
print list1, list2
>>> [1, 3] [1]
在函数内部,Python会将每个变量假定为局部变量,除非将其声明为全局变量,或者您正在访问全局变量。
list1.append(2)
是可能的,因为你正在访问'list1'并且列表是可变的。
list2 = [222]
是可能的,因为你正在初始化一个局部变量。
但是,如果您取消注释#list1 = [9],您会得到
UnboundLocalError: local variable 'list1' referenced before assignment
这意味着你正试图初始化一个新的局部变量'list1',但它之前已经被引用过了,你不在范围之内来重新分配它。
要输入范围,请将'list1'声明为全局。
即使最后有错字,我也强烈建议您阅读。
基本上它告诉解释者,它的给定变量应该在全局级被修改或分配,而不是默认的本地级。
链接地址: http://www.djcxy.com/p/1603.html上一篇: In Python what is a global statement?
下一篇: purpose of 'if