更容易为函数中的多个全局变量赋值

时间:2014-02-26 08:49:54

标签: python

我在python文件中声明了一些全局变量,并希望在函数中将它们的值重置为None。是否有更好的/ hack / pythonic方式将所有变量声明为全局并在一行中为它们赋值?

doctype, content_type, framework, cms, server = (None,)*5

def reset():
        doctype, content_type, framework, cms, server = (None,)*5

3 个答案:

答案 0 :(得分:2)

=,因为你正在向他们提供不可变的None

doctype = content_type = framework = cms = server = None

如果您想使用reset函数,则必须在其中声明global

def reset():
    global doctype, content_type, framework, cms, server
    doctype = content_type = framework = cms = server = None

答案 1 :(得分:1)

使用globals获取对全局变量字典的引用:

Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
>>> globals().update({'a': 2})
>>> a
2
>>> 

在你的情况下:

globals().update({
    'doctype': None,
    'content_type': None,
    ...
})

使用dict理解在一行中执行此操作:

或者这个:

for var_name in ('doctype', 'content_type', 'framework', 'cms', 'server'):
     globals()[var_name] = None

或者这个:

module = sys.modules[__name__]
for var_name in ('doctype', 'content_type', 'framework', 'cms', 'server'):
     setattr(var_name, None)

答案 2 :(得分:0)

在这种情况下,我会使用一个全局可变对象,例如dict

conf = dict.fromkeys(['doctype', 'content_type', 'framework', 'cms', 'server'])

def reset():
    for k in conf:
        conf[k] = None

或上课。这样你就可以在课堂上填充reset

class Config():
    doctype = None
    content_type = None
    framework = None
    cms = None
    server = None

    @classmethod
    def reset(cls):   
        for attr in [i for i in cls.__dict__.keys()
                     if i[:1] != '_' and not hasattr(getattr(cls, i), '__call__')]:
            setattr(cls, attr, None)