当前位置: 首页 > 面试题库 >

Python范围规则到底是什么?

拓拔麒
2023-03-14
问题内容

Python范围规则到底是什么?

如果我有一些代码:

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

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

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

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

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


问题答案:

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

LEGB规则

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

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

  • Global (module) -在模块文件的顶层分配名称,或通过执行globalhtml" target="_blank">声明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



 类似资料:
  • 正如标题所说: “仿佛”规则到底是什么? 注意:将其标记为C和C++,因为它与两种语言都相关。

  • 任何编程中的范围都是程序的一个区域,其中定义的变量可以存在,并且超出该变量,无法访问它。 有三个地方可以用C编程语言声明变量 - 在函数或块内部,称为local变量。 在所有函数之外,称为global变量。 在函数参数的定义中称为formal参数。 让我们了解什么是local和global变量,以及formal参数。 局部变量 (Local Variables) 在函数或块内声明的变量称为局部变量

  • 问题内容: 我可以阅读 MySQL 文档,这很清楚。但是,如何决定要使用哪个字符集?整理对哪些数据有影响? 我要求对两者以及如何选择它们进行解释。 问题答案: 从MySQL 文档: 甲 字符集 是一组符号和编码。甲 归类 为在一个字符集的字符进行比较的一组规则。让我们通过一个假想字符集的例子来清楚地区分。 假设我们有一个包含四个字母的字母:“ A”,“ B”,“ a”,“ b”。我们给每个字母一个

  • 问题内容: 我不知道如何工作。 文档中有一些解释。例如,它们的意思是: 带有最终估算器的变换管线。 为了使我的问题更清楚,什么是?它们如何工作? 编辑 由于有了答案,我可以使我的问题更清楚: 当我调用管道并通过时,需要两个转换器和一个估计器,例如: 我叫这个怎么办? 我不知道估算器如何成为变压器以及如何装配变压器。 问题答案: *scikit-learn中的 *Transformer- 一些具有f

  • 问题内容: 我试图了解在多个JavaConfig上下文中放置注释的正确位置在哪里? 考虑以下情形:我在JPAConfig.java和AppConfig.java中具有服务bean集的JPA配置。然后,在RootConfig.java中编写整个应用程序配置。 我在JPAConfig.java中定义事务管理器,并启用对JPA存储库的扫描- 当这些暴露事务行为时,我将其放到JPAConfig上,并且它可

  • 我刚开始编码。我想对同一个变量使用两次switch语句,我被告知要这样做,变量必须是'inscope'。 作为一个初学者,我不知道那是什么意思。那么在范围内意味着什么呢?而且,如果一个变量不在作用域中,我如何使它在作用域中?