gpt4 book ai didi

python - 范围规则的简短描述

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:22 25 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作用域解析的一个简明规则,来自Learning Python, 3rd. Ed. 。 (这些规则特定于变量名,而不是属性。如果您引用时不带句点,则适用这些规则。)

LEGB规则

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

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

  • Global(模块)——在模块文件顶层分配的名称,或者通过在 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/54052137/

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