(Python)如何在未定义全局变量时初始化全局变量?

时间:2017-03-17 15:55:23

标签: python dictionary global

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

global dict
if dict is None:
    dict = {}

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

不幸的是,我得到了

**NameError: global name 'dict' is not defined**

我理解我应该定义变量,但是由于这个代码被多次调用,只需说dict = {}我每次调用代码时都会重新定义变量,除非我能以某种方式检查是否它没有定义,只能定义它。

2 个答案:

答案 0 :(得分:4)

捕获错误:

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

重要说明:

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

答案 1 :(得分:1)

更惯用的方法是将名称提前设置为sentinel值,然后检查:

_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:< / p>

import threading

# Thread local storage
_tls = threading.local()

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