小编典典

范围规则的简短描述?

all

Python 作用域规则 到底 是什么?

如果我有一些代码:

code1
class Foo:
   code2
   def spam.....
      code3
      for code4..:
       code5
       x()

在哪里x找到?一些可能的选择包括以下列表:

  1. 在封闭的源文件中
  2. 在类命名空间中
  3. 在函数定义中
  4. 在 for 循环索引变量中
  5. 在 for 循环内部

spam当函数被传递到其他地方时,执行期间也有上下文。也许lambda
函数
的传递有点不同?

某处必须有一个简单的参考或算法。对于中级 Python 程序员来说,这是一个令人困惑的世界。


阅读 89

收藏
2022-03-13

共1个答案

小编典典

实际上,Python Scope 解析的简明规则

LEGB 规则

  • 本地def- 在函数(或)内以任何方式分配的名称lambda,并且未在该函数中声明为全局名称

  • 封闭 函数——在任何和所有静态封闭函数(deflambda)的局部范围内分配的名称,从内部到外部

  • 全局 (模块)——在模块文件的顶层分配的名称,或通过在文件中执行global语句def

  • 内置 (Python) - 在内置名称模块中预分配的名称:openrangeSyntaxError

所以,在

code1
class Foo:
    code2
    def spam():
        code3
        for code4:
            code5
            x()

for循环没有自己的命名空间。按照 LEGB 顺序,范围将是

  • L: 局部于def spam(in code3, code4, and code5)
  • E:任何封闭函数(如果整个例子在另一个def
  • G:x模块(in code1)中是否有任何全局声明?
  • xB: Python 中的任何内置函数。

x永远不会被发现code2

2022-03-13