例1:a=1
def b():
print a
a=2
print a
例2:
^{pr2}$
示例1按预期工作,示例2失败
UnboundLocalError:赋值之前引用了局部变量“a”
在第一个印刷品上
有人能解释一下为什么会这样吗?是错误还是特征?在
第二个例子不是很有用,但我不明白为什么它不起作用。
我希望函数b首先打印全局a,然后检查全局a是否为1。如果这是真的,局部a将被设置为2。然后要么打印全局a,要么打印局部a,这取决于全局a的值。在示例中,全局a是1,所以我希望看到局部a的值是2。在
例3:a=1
def b():
print a
作品
例4:a=1
def b():
print a
a=2
失败,正如正确注释的示例1一样,我实际上只测试了示例3,并认为它与示例1相同。在
现在我明白了关于整个范围经常重复的事情。这对我来说是全新的,下面的例子(Ipython)让我很开心:In [13]: a=1
In [14]: def b():
....: a=2
....: global a
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
....: print a
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
....:
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global declaration
:3: SyntaxWarning: name 'a' is assigned to before global
declaration
global a
In [15]: b()
2
In [16]: print a
2
所以这个机制不同于声明一个函数或类似的东西,我只能在更改状态之后才能访问它。在
python中还有其他类似的操作吗-穿越时间?在
为了使示例正常工作,可以使用globals():
示例1工作:a=1
def b():
print globals()["a"]
a=2
print a
示例2工作:a=1
def b():
global_a=globals()["a"]
print global_a
if global_a==1:
a=2
print a
例4工作:a=1
def b():
print globals()["a"]
a=2