首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为函数中的多个全局变量赋值的更简便的方法

为函数中的多个全局变量赋值的更简便的方法
EN

Stack Overflow用户
提问于 2014-02-26 08:49:53
回答 3查看 1.7K关注 0票数 1

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

代码语言:javascript
运行
复制
doctype, content_type, framework, cms, server = (None,)*5

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-26 08:55:00

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

代码语言:javascript
运行
复制
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
>>> globals().update({'a': 2})
>>> a
2
>>> 

就你而言:

代码语言:javascript
运行
复制
globals().update({
    'doctype': None,
    'content_type': None,
    ...
})

用一条线理解来做这件事:

或者这个:

代码语言:javascript
运行
复制
for var_name in ('doctype', 'content_type', 'framework', 'cms', 'server'):
     globals()[var_name] = None

或者这个:

代码语言:javascript
运行
复制
module = sys.modules[__name__]
for var_name in ('doctype', 'content_type', 'framework', 'cms', 'server'):
     setattr(var_name, None)
票数 1
EN

Stack Overflow用户

发布于 2014-02-26 08:52:34

Chain =,因为您将不可变的None与它们联系在一起:

代码语言:javascript
运行
复制
doctype = content_type = framework = cms = server = None

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

代码语言:javascript
运行
复制
def reset():
    global doctype, content_type, framework, cms, server
    doctype = content_type = framework = cms = server = None
票数 2
EN

Stack Overflow用户

发布于 2014-02-26 09:05:58

在本例中,我将使用一个全局可变对象,例如dict

代码语言:javascript
运行
复制
conf = dict.fromkeys(['doctype', 'content_type', 'framework', 'cms', 'server'])

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

或者上课。通过这种方式,您可以在类本身中封装reset

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22036124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档