Python范围规则到底是什么?

发布于 2021-02-02 23:24:59

Python范围规则到底是什么?

如果我有一些代码:

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

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

  1. 在随附的源文件中
  2. 在类名称空间中
  3. 在函数定义中
  4. 在for循环中,索引变量
  5. 在for循环内

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

某个地方必须有一个简单的参考或算法。对于中级Python程序员而言,这是一个令人困惑的。

关注者
0
被浏览
536
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    实际上,这是学习Python的第3条关于Python范围解析的简明规则。埃德 。(这些规则特定于变量名,而不是属性。如果不加句点引用,则适用这些规则。)

    LEGB规则

    • L ocal —在函数(deflambda)中以任何方式分配的名称,但未在该函数中声明为全局

    • E nclosing-function —在任何和所有静态封装函数(deflambda)的本地范围内从内部到外部分配的名称

    • Global (module) -在模块文件的顶层分配名称,或通过执行global在声明def文件中

    • Built-in (Python)-的名称在内置模块的名称预先分配的openrangeSyntaxError,等

    因此,在

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

    该for循环中没有自己的名字空间。按照LEGB顺序,范围为

    • L:本地的def spam(在code3,code4和code5)
    • E:任何封闭函数(如果整个示例都在另一个示例中def)
    • G:x模块中的全局中是否有任何声明code1?
    • B:任何内置x的Python。

    x永远不会被发现code2



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看