gpt4 book ai didi

python - 范围规则的简短描述?

转载 作者:IT老高 更新时间:2023-10-28 12:03:05 26 4
gpt4 key购买 nike

究竟什么是 Python 范围规则?

如果我有一些代码:

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

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

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

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

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

最佳答案

其实是一个简洁的 Python Scope 解析规则,来自 Learning Python, 3rd. Ed. . (这些规则特定于变量名称,而不是属性。如果引用它时不带句点,则适用这些规则。)

LEGB 规则

  • Local — 在函数中以任何方式分配的名称(deflambda),并且未在其中声明为全局名称功能

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

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

  • Built-in (Python) — 在内置名称模块中预分配的名称:openrange语法错误

所以,在

的情况下
code1
class Foo:
code2
def spam():
code3
for code4:
code5
x()

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

  • L:def spam 中的本地(在 code3code4code5 中)
  • E: 任何封闭函数(如果整个示例在另一个 def 中)
  • G:是否在模块中(在 code1 中)全局声明了任何 x
  • B:Python 中的任何内置 x

x 永远不会在 code2 中找到(即使在您预期会出现的情况下,请参阅 Antti's answerhere)。

关于python - 范围规则的简短描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/291978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com