Python 为函数中的多个全局变量赋值的更简单方法
我在python文件中声明了几个全局变量,并希望在函数中将它们的值重置为None。是否有更好的/hack/pythonic方法将所有变量声明为全局变量,并在一行中为它们赋值Python 为函数中的多个全局变量赋值的更简单方法,python,Python,我在python文件中声明了几个全局变量,并希望在函数中将它们的值重置为None。是否有更好的/hack/pythonic方法将所有变量声明为全局变量,并在一行中为它们赋值 doctype, content_type, framework, cms, server = (None,)*5 def reset(): doctype, content_type, framework, cms, server = (None,)*5 链=,因为您将不可变None分配给它们: doc
doctype, content_type, framework, cms, server = (None,)*5
def reset():
doctype, content_type, framework, cms, server = (None,)*5
链
=
,因为您将不可变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
用于获取对全局变量dict的引用:
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
>>> globals().update({'a': 2})
>>> a
2
>>>
就你而言:
globals().update({
'doctype': None,
'content_type': None,
...
})
使用听写理解在一行中完成此操作:
或者这个:
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)
或者这个:
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)
在本例中,我将使用一个全局可变对象,
dict
,例如:
conf = dict.fromkeys(['doctype', 'content_type', 'framework', 'cms', 'server'])
def reset():
for k in conf:
conf[k] = None
或者班级。通过这种方式,您可以在类本身中装入重置:
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)
“这真的容易吗?”张晓晨,它更通用。如果你有更多的变量,或者你把变量名保存在一个列表中——这很容易——我会对一个依赖于这么多全局变量的设计深表怀疑。