小编Vas*_*nov的帖子

何时检查是否存在非局部变量?

我正在学习Python,现在我正在讨论范围和非本地语句.在某些时候,我以为我想到了这一切,但随后非本地人来了,打破了一切.

示例1:

print( "let's begin" )
def a():
    def b():
        nonlocal x
        x = 20
    b()

a()
Run Code Online (Sandbox Code Playgroud)

自然运行失败.
更有趣的是,print()不会被执行.为什么?.

我的理解是封闭def a()在执行之前print()不会执行,嵌套def b()只在a()被调用时执行.我很迷惑...

好的,让我们尝试第2个例子:

print( "let's begin" )
def a():
    if False: x = 10
    def b():
        nonlocal x
        x = 20
    b()

a()
Run Code Online (Sandbox Code Playgroud)

Aaand ......它运行良好.Whaaat?这是怎么解决的?x = 10在函数a中永远不会执行!

我的理解是在运行时评估和执行非本地语句,搜索封闭函数的调用上下文并将本地名称绑定x到某个特定的"外部" x.如果x外部函数中没有- 引发异常.再次,在运行时.

但现在看来这是在语法分析时完成的,非常愚蠢的检查"看看外部函数x = blah,如果有这样的东西 - 我们很好",即使x = blah从未执行过...... …

python scope python-3.x

10
推荐指数
1
解决办法
472
查看次数

标签 统计

python ×1

python-3.x ×1

scope ×1