仅仅是关于python中局部和全局作用域的初学者问题
X = 100
#is X a global variable?.We defined it outside the function scope
def foo():
print(X)
return X
#it prints 100 and even returns it
def foo():
X = X + 10
#local error
#UnboundLocalError: local variable 'X' referenced before assignment
def foo():
global X
# if X is a global variable why specify again?
X = X + 10
return X
答案 0 :(得分:3)
要修改变量的全局副本,您需要使用global
关键字,但如果仅访问它,则不需要global
。
答案 1 :(得分:2)
在Python中,仅在函数内部引用的变量是隐式全局的。如果在函数体内任何位置为变量分配了值,除非明确声明为全局变量,否则假定该变量为局部变量。
这意味着您可以在没有global
关键字的情况下访问函数内的全局变量。但是,如果要更改它,则必须事先使用global
关键字。
答案 2 :(得分:1)
global
和nonlocal
是我的初学者,很奇怪。
只需考虑一下:为什么我们在Python中需要它们?
这是因为我们不需要var
,let
等类似的东西来声明变量。
考虑一下Javascript
,它也是动态脚本语言,与python非常相似,但是它需要var
或let
或const
来声明变量。
声明变量最重要的是确定范围。
因此,在Python中,变量具有隐式的默认范围:定义变量的当前范围,如果要更改某些变量的范围,则需要使用global
或nonlocal
=
左侧的所有名称都意味着要定义变量。
在执行一定范围的代码之前,Python将预先计算所有local variables
,即=
左侧的所有UnboundLocalError: local variable 'X' referenced before assignment
。 这就是为什么您获得def foo():
X = X + 10
的原因:
built_in
因此,如果我们查找不在当前定义范围内的那些名称,
遵循范围链的规则:向上,向上,向上直到=
。
记住:javafx-controls-11.0.2-mac.jar
左侧任何名称的范围都是默认的当前范围,在引用它之前,您必须先对其进行分配(绑定一些内容)。