【问题标题】:why can't python use global and local scope for same variable in a function为什么python不能对函数中的相同变量使用全局和局部范围
【发布时间】:2018-12-29 12:08:26
【问题描述】:

在学习 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

我知道全局关键字也可以解决它,如果我在 method1() 中删除 X 的分配将解决它并打印全局 X,但我无法理解 python 如何事先知道我有一个 var 分配函数中代码的某处同名?

如有任何帮助,我们将不胜感激。

【问题讨论】:

  • Python 在运行代码之前会对其进行扫描,如下例所示。这就是为什么如果你犯了一个缩进错误,它会知道(例如,有一个没有正文的 if 语句)。

标签: python scopes


【解决方案1】:

范围不能在代码块中混合。

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

(强调我的)

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

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多