如何仅在未定义时初始化全局变量?

How do you initialize a global variable only when its not defined?

我有一个全局字典变量,将在多次调用的函数中使用。我无法控制函数何时被调用,也无法控制我正在编写的函数之外的范围。只有在未初始化的情况下,我才需要初始化变量。初始化后,我将为其添加值。

global dict
if dict is None:
    dict = {}

dict[lldb.thread.GetThreadID()] = dict[lldb.thread.GetThreadID()] + 1

不幸的是,我得到了

NameError: global name 'dict' is not defined

我知道我应该定义变量,但是由于这段代码被多次调用,只要说 dict = {} 我会在每次调用代码时重新定义变量,除非我能以某种方式检查它是否未定义,然后才定义它。

捕获错误:

try:
    _ = myDict
except NameError:
    global myDict
    myDict = {}

重要提示:

不要使用dict或任何其他内置类型作为变量名。

一种更惯用的方法是提前将名称设置为标记值,​​然后进行检查:

_my_dict = None

...

def increment_thing():
    global _my_dict
    if _my_dict is None:
        _my_dict = {}
    thread_id = lldb.thread.GetThreadID()
    _my_dict[thread_id] = _my_dict.get(thread_id, 0) + 1

请注意,我对 lldb 一无所知——但如果它使用 python 线程,您最好使用threading.local:

import threading

# Thread local storage
_tls = threading.local()

def increment_thing():
    counter = getattr(_tls, 'counter', 0)
    _tls.counter = counter + 1