python – 全局语句的范围

python – 全局语句的范围,第1张

概述从 Python Reference起 The global statement has the same scope as a name binding operation in the same block. If the nearest enclosing scope for a free variable contains a global statement, the free vari 从 Python Reference起

The global statement has the same scope as a name binding operation in the same block.

If the nearest enclosing scope for a free variable contains a global statement,the free variable is treated as a global.

这两句话是什么意思?

你能举例说明一下它们的含义吗?

谢谢.

解决方法

The global statement has the same scope as a name binding operation in the same block.

这说明全球声明的适用范围.

基本上,在正常情况下,当你这样做时:

foo = 1

在函数内部,它使foo成为该函数的本地范围变量;即使名称仅在函数末尾指定,它从一开始就是本地的,它在赋值时不会从全局切换到本地.

同样,如果您的功能包括以下行:

global foo

即使全局foo是函数的最后一行,它也会使foo成为整个函数的全局函数.

重要的是,你在函数的哪个位置并不重要.就像:

def x():    print(y)    y = 1

引发UnboundLocalError(因为赋值为y使其在函数的整个范围内都是局部的,并在给它赋值之前打印它),执行:

y = 0def x():    print(y)    y = 1    global y

将在第一行打印y的全局值(第一次调用时为0,第二次调用为1)而不会出现错误(而不是引发UnboundLocalError或其他内容),因为全局语句始终适用于整个函数,无论是在它们之前还是之后实际出现,就像局部变量是函数的整个范围的局部变量一样,即使它们仅在最后分配.请注意,现代Python确实引发了一个SyntaxWarning,以便在关联的全局语句之前使用全局名称,因此最好将全局语句放在第一位,以便清晰起见并避免出现警告.

关于嵌套范围的部分:

If the nearest enclosing scope for a free variable contains a global statement,the free variable is treated as a global.

使用多个嵌套作用域覆盖一个非常不寻常的转角案例,其中外部作用域分配给局部变量,一个作用域内的作用域声明全局名称,并且该作用域内的作用域使用(但不指定)该名称.简短的定义是“如果你正在寻找一个变量来读取它不在本地范围内,当你查看它的外部范围时,如果它是其中一个的全局变量,则停止检查嵌套范围并直接进入全局范围” .这个例子最简单:

foo = 1def outermost():    def mIDdle():        global foo  # Stops scope checking,skips straight to global        def innermost():            print(foo)        return innermost    foo = 2  # Doesn't change global foo    return mIDdle

使用此定义,执行outermost()()()将输出1,因为在最里面检查中间的范围查找确定foo对于中间范围是全局的,并且跳过检查最外面直接到全局foo.

相反,你有:

foo = 1def outermost():    def mIDdle():        # No global declaration        def innermost():            print(foo)        return innermost    foo = 2  # Doesn't change global foo    return mIDdle

那么输出就是2;最里面的foo查找不会在本地或中间范围内找到它,但它会在最外层范围内找到它并从那里拉出来.你不太可能看到这样的结构,但语言文档必须尽可能明确.

总结

以上是内存溢出为你收集整理的python – 全局语句的范围全部内容,希望文章能够帮你解决python – 全局语句的范围所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1193982.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存