在学习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赋值函数中的代码下方是否有相同的名称?
将寻求任何帮助。
答案 0 :(得分:1)
作用域不能在代码块内混合。
https://docs.python.org/3.6/reference/executionmodel.html#resolution-of-names
(重点是我的)
如果在代码块内的任何地方进行了名称绑定操作,则全部 块中名称的使用被视为对 当前区块。在名称中使用名称时,可能导致错误 在绑定之前阻止。这条规则很微妙。 Python缺乏 声明并允许名称绑定操作发生在任何地方 在代码块中。代码块的局部变量可以是 通过扫描块的整个文本进行名称绑定来确定 操作。