恢复'global <var>'语句

Lea*_*ner 2 python scope global local

我正在学习Python,只是有这个问题.它可能没有实际价值,我问这个可能是因为迂腐的好奇心.

我有一个功能:

def f():
    x = 12    #this is a local variable
    global x  #this is a global I declared before
    x = 14    #changes global x

    <How can I return the local x?>
Run Code Online (Sandbox Code Playgroud)

我知道这很难看,我确实得到了一个语法警告.只是想知道如何"取回"我的局部变量.

谢谢大家.

Dav*_*ebb 7

您的代码没有按照您的想法进行,并且没有办法根据您描述的内容进行更改.你不能"恢复"什么globals,因为它在运行时没有影响.

global关键字在解释编译时所以在第一线f(),您可以设置x = 12这是改变全球x因为编译器决定了x是指x在全局命名空间在整个功能,而不仅仅是后global声明.

您可以轻松测试:

>>> def g():
...     x = 12
...     y = 13
...     global x
...     print "locals:",locals()
...
<stdin>:4: SyntaxWarning: name 'x' is assigned to before global declaration
>>> g()
locals: {'y': 13}
Run Code Online (Sandbox Code Playgroud)

locals()函数为我们提供了本地命名空间的视图,我们可以看到其中没有x.

文档说明如下:

global声明中列出的名称不得在该语句之前的文本中使用相同的代码块global.

global语句中列出的名称不得定义为形式参数或for循环控制目标,class定义,函数定义或import语句.

当前的实现并没有强制执行后两个限制,但是程序不应该滥用这种自由,因为未来的实现可能会强制执行它们或者默默地改变程序的含义.

只需给局部变量一个不同的名称.