python为什么不能在函数中对相同变量使用全局和局部作用域

时间:2018-07-21 10:17:20

标签: python scopes

在学习python的同时,我了解python逐行运行,除非不执行一行代码,否则它不会创建或分配变量,并且在我尝试类似以下方法之前,一切都适用于这种理论:

X = 1

def method1():
    print (X)  # Why global X, is not printed here
    X = 20
    print (X)  # and then use local X here

我知道global关键字也可以解决它,如果我在method1()中删除了X的赋值会解决它并且打印了全局X,但是我无法理解python如何事先知道我有var赋值函数中的代码下方是否有相同的名称?

将寻求任何帮助。

1 个答案:

答案 0 :(得分:1)

作用域不能在代码块内混合。

https://docs.python.org/3.6/reference/executionmodel.html#resolution-of-names

(重点是我的)

  

如果在代码块内的任何地方进行了名称绑定操作,则全部   块中名称的使用被视为对   当前区块。在名称中使用名称时,可能导致错误   在绑定之前阻止。这条规则很微妙。 Python缺乏   声明并允许名称绑定操作发生在任何地方   在代码块中。代码块的局部变量可以是   通过扫描块的整个文本进行名称绑定来确定   操作。

相关问题