使所有变量可访问命名空间

Gök*_*ver 3 python

说我有一个简单的功能:

def myfunc():
    a = 4.2
    b = 5.5
    ... many similar variables ...
Run Code Online (Sandbox Code Playgroud)

我只使用这个函数一次,我想知道什么是最简单的方法,使函数内的所有变量都可以访问我的主名称空间.

我是否必须为每个项目声明全局?或任何其他建议的方法?

谢谢.

Ale*_*lli 8

在我的偏见中,最好的方法是将字典包装成一个很好的对象,其中"变量"作为属性被访问 - 我在多年前引入它时称为Bunch的模式,以及最后一个项目的一个很好的例子. Python的Zen(如果您不知道那是什么,请import this在解释器交互式提示符下).以机智...:

class Bunch(object):
    def __init__(self, d=None):
        if d is not None: self.__dict__.update(d)

def myfunc():
    a = 4.2
    b = 5.5
    ...
    return Bunch(locals())

x = myfunc()

print x.a, x.b
Run Code Online (Sandbox Code Playgroud)

使用合格的名称x.ax.b,而不是barenamesab,是至关重要的想法在这里:合格的名称让你不同的命名空间和对待他们,而barenames会使一切的一个大汤和违反的Python的禅;-).当然,没有必要使用未打开的字典和难看的x['a'], x['b']访问! - )


Ign*_*ams 5

如果你想要的是你的常量的分离,那么把它们放在另一个模块中:

consts.py:

foo = 42
bar = 'quux'
Run Code Online (Sandbox Code Playgroud)

main.py:

import consts

print consts.foo
print consts.bar[::-1]
Run Code Online (Sandbox Code Playgroud)