2024-04-29 10:04:57 发布
网友
如果这管用的话
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在赋值之前被引用,但是它在第一个示例中起作用。。。你知道吗
在这两个函数的后缀1和2中,可以找到本地名称(Python2中的语法略有不同):
In [7]: main1.__code__.co_varnames Out[7]: ('globe',) In [8]: main2.__code__.co_varnames Out[8]: ('globe', 'x')
所以x有不同的地位。在第二种情况下,局部的x屏蔽了全局的,因此x=x+1导致了错误,因为还没有定义。你知道吗
x
从docs:
If a name is bound in a block, it is a local variable of that block, unless declared as nonlocal or global.(...).If a variable is used in a code block but not defined there, it is a free variable.
在python中,当您指定一个变量时,声明会自动发生。 因此,当您将值赋给函数内的x时,python认为这是一个新的局部变量,隐藏了全局x。你知道吗
如果要为全局x赋值,可以执行以下操作:
x=5 def main(): global x x += 1 print x main()
在python中,如果不显式地指定全局变量,则不能这样做。通过编写x+=1,您为x赋值,并隐式地将x声明为局部变量。但是它没有被定义,因此你会得到一个错误。你知道吗
x+=1
循环没有实际效果,因为locals字典是空的。你知道吗
locals
如果您想在Python中使用全局变量(您不应该这样做,但那是另一回事),那么应该使用global关键字。你知道吗
global
在这两个函数的后缀1和2中,可以找到本地名称(Python2中的语法略有不同):
所以
x
有不同的地位。在第二种情况下,局部的x
屏蔽了全局的,因此x=x+1导致了错误,因为还没有定义。你知道吗从docs:
在python中,当您指定一个变量时,声明会自动发生。 因此,当您将值赋给函数内的
x
时,python认为这是一个新的局部变量,隐藏了全局x
。你知道吗如果要为全局
x
赋值,可以执行以下操作:在python中,如果不显式地指定全局变量,则不能这样做。通过编写
x+=1
,您为x赋值,并隐式地将x声明为局部变量。但是它没有被定义,因此你会得到一个错误。你知道吗循环没有实际效果,因为
locals
字典是空的。你知道吗如果您想在Python中使用全局变量(您不应该这样做,但那是另一回事),那么应该使用
global
关键字。你知道吗相关问题 更多 >
编程相关推荐