如果有效
x=5
def main():
for globe in locals():
globals().update(locals()[globe])
print x
main()
那么为什么不呢?
x=5
def main():
for globe in locals():
globals().update(locals()[globe])
x+=1
print x
main()
后一个语句中的错误声称x在赋值之前被引用,但它在第一个示例中起作用...
答案 0 :(得分:3)
在python中,当您分配变量时,声明会自动发生。
因此,当您在函数内部为x
赋值时,python认为这是一个新的局部变量,遮蔽全局x
。
如果您想为全局x
分配值,则可以执行此操作:
x=5
def main():
global x
x += 1
print x
main()
答案 1 :(得分:0)
如果没有明确地这样做,你不能在python中分配一个全局变量。通过编写x+=1
,您将为x分配值,并隐式声明x为局部变量。但它没有定义,因此你得到一个错误。
循环没有实际效果,因为locals
字典为空。
如果你想在Python中使用全局变量(你不应该这样做,但这是另一回事),你应该使用global
关键字。
答案 2 :(得分:0)
后缀为1和2的两个函数,你可以找到本地名称(python 2中的语法略有不同):
x
所以x
具有不同的身份。在第二种情况下,本地 HasOptional(t => t.ActivityInstance)
.WithRequired(t => t.MsdsDataValidation);
掩盖了全局值,因此x = x + 1会导致错误,因为尚未定义。
来自docs:
如果名称绑定在块中,则它是该块的局部变量,除非声明为非本地或全局。(...)。如果在代码块中使用了变量但未在其中定义,则为一个自由变量。