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