【问题标题】:globals() scope inside a function [duplicate]函数内的 globals() 范围
【发布时间】:2018-02-24 05:40:46
【问题描述】:

我有一个关于 python 中的 globals() 的问题

我的示例代码

b=9
def a1():
 'kkk'

a1()
print globals()

我将输出 b 设为全局

由于 b 是全局的,我希望我可以在任何地方修改它 所以我将代码修改为

b=9
def a1():
 'kkk'
 b=100
a1()
print globals()

我的 globals() 仍然说 b 为 100。为什么函数内部的 b 被视为局部值,而我的 globals() 说它是全局的?

注意:如果我在函数中添加关键字 global b,它会转换为全局。 我的问题是为什么在 globals() 将 b 声明为全局时 b 没有在函数内部被修改?

【问题讨论】:

  • 您的问题不是直接与该错误有关,但实际上是相同的:为什么在本地函数中分配变量?

标签: python global-variables globals


【解决方案1】:

在函数内部,除非使用关键字global,否则修改的不是全局变量。相反,一个局部变量被创建并在它超出范围时被销毁

【讨论】:

    【解决方案2】:

    请参阅Python docs 了解更多信息。复制文本以防 URL 不起作用

    在 Python 中,仅在函数内部引用的变量是隐式全局的。如果一个变量在函数体中的任何位置被赋值,除非明确声明为全局变量,否则它被假定为局部变量。

    虽然一开始有点令人惊讶,但稍加思考就可以解释这一点。一方面,对分配的变量要求全局提供了防止意外副作用的障碍。另一方面,如果所有全局引用都需要全局,那么您将一直使用全局。您必须将每个对内置函数或导入模块组件的引用声明为全局。这种混乱会破坏全局声明识别副作用的有用性。

    【讨论】:

      【解决方案3】:

      由于你的代码b是a1()中的一个局部变量,所以要使用全局变量,你应该先对python说,然后使用它,如下:

      b=9
      def a1():
       'kkk'
       global b
       b=100
      
      a1()
      print globals()
      

      【讨论】:

      • 我的问题是,为什么即使我没有在函数中使用关键字“global”,python 也会将 b 报告为全局?
      • 你定义了'b'全局,表示它在任何函数或类之外,使用global关键字不定义全局,它在函数中标记了一个以前全局定义的变量要使用跨度>
      猜你喜欢
      • 1970-01-01
      • 2012-06-06
      • 2011-06-12
      • 2021-05-21
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多