Python 如何拥有一个非常局部的全局变量?

Python 如何拥有一个非常局部的全局变量?,python,global-variables,Python,Global Variables,我发现很多时候我必须重置一些全局变量,否则只需读取 因此,我以以下片段结束: if condition: global _global _global = None 是否有可能实现以下目标: if condition: global._global = None 我想做的是将“global”前缀限制为一条语句 注意:在这种特定情况下,这两条语句是绝对等效的,因为如果已经创建了一个局部范围,但如果代码的单位更大,则不是这样 这是“pythony可接受的”还是我被我的“前

我发现很多时候我必须重置一些全局变量,否则只需读取

因此,我以以下片段结束:

if condition:
    global _global
    _global = None
是否有可能实现以下目标:

if condition:
    global._global = None
我想做的是将“global”前缀限制为一条语句

注意:在这种特定情况下,这两条语句是绝对等效的,因为
如果
已经创建了一个局部范围,但如果代码的单位更大,则不是这样


这是“pythony可接受的”还是我被我的“前世”迷住了?

你可以像这样使用
del
关键字和
globals()

del globals()["_global"]

您可以像这样使用
del
关键字和
globals()

del globals()["_global"]

嗯。。。我不想完全删除它,只是为了“清除”它,这样一个
如果
就不会抱怨了。我想我可以写这样的东西:
globals()[“\u global”]=None
,对吗?@ZioByte你可以这样做。如果未定义变量,请注意
KeyError
。你应该在你的代码中处理它嗯,要处理可能的
KeyError
s需要不止一行代码@ZioByte:FWIW,我认为
globals()[“\u global”]=None
将是非音速的。嗯。。。我不想完全删除它,只是为了“清除”它,这样一个
如果
就不会抱怨了。我想我可以写这样的东西:
globals()[“\u global”]=None
,对吗?@ZioByte你可以这样做。如果未定义变量,请注意
KeyError
。你应该在你的代码中处理它嗯,要处理可能的
KeyError
s需要不止一行代码@ZioByte:FWIW,我认为
globals()[“_global”]=None
将是非Python的。在我看来,从技术上讲,显式声明变量
global
(请参见第二行)。很遗憾看到你在“前世”中显然没有尽可能多地避免全局变量。@martineau:事实上我学过,但我正在与“pythonic方式”作斗争;在这个特定的例子中,我将使用一个单例类,
\u global
将是一个实例变量。在python中,他们告诉我“静态类”是作为模块实现的。。。我需要模块级变量!任何关于这个主题的建议(不仅仅是)都将是非常受欢迎的!注意:在这种特定情况下,模块处理某些硬件:拥有多个实例没有多大意义。在Python中,模块实际上是单例的。例如,如果在名为
mymod
的模块(在名为
mymod.py
的文件中)中定义了模块级变量
foobar
,并在程序的主(或其他)脚本中定义了
import mymod
,则可以通过引用
mymod.foobar
来更改(以及删除)该变量。i、 e.
mymod.foobar=None
——这样做会被认为是完全“pythonic”…附言。请注意,使用mymod导入foobar的
然后执行
foobar=None
将不起作用,因为您将只更改本地名称
foobar
所指的值,而不是最初通过来自的
分配给它的模块的值。。。导入
。在我看来,从技术上讲,显式声明变量
全局
(请参阅本文第二行)更为“pythonic”。很遗憾看到你在“前世”中显然没有尽可能多地避免全局变量。@martineau:事实上我学过,但我正在与“pythonic方式”作斗争;在这个特定的例子中,我将使用一个单例类,
\u global
将是一个实例变量。在python中,他们告诉我“静态类”是作为模块实现的。。。我需要模块级变量!任何关于这个主题的建议(不仅仅是)都将是非常受欢迎的!注意:在这种特定情况下,模块处理某些硬件:拥有多个实例没有多大意义。在Python中,模块实际上是单例的。例如,如果在名为
mymod
的模块(在名为
mymod.py
的文件中)中定义了模块级变量
foobar
,并在程序的主(或其他)脚本中定义了
import mymod
,则可以通过引用
mymod.foobar
来更改(以及删除)该变量。i、 e.
mymod.foobar=None
——这样做会被认为是完全“pythonic”…附言。请注意,使用mymod导入foobar的
然后执行
foobar=None
将不起作用,因为您将只更改本地名称
foobar
所指的值,而不是最初通过来自的
分配给它的模块的值。。。导入