Ale*_*lli 88
考虑Bunch替代方案:
class Bunch(object):
def __init__(self, adict):
self.__dict__.update(adict)
Run Code Online (Sandbox Code Playgroud)
因此,如果您有一个字典d并想要使用语法x.foo而不是笨拙地访问(读取)其值,那么d['foo']就这样做
x = Bunch(d)
Run Code Online (Sandbox Code Playgroud)
这个作品内外的功能-它极大地比注入更清洁和更安全的d进入globals()!记住Python的Zen的最后一行......:
>>> import this
The Zen of Python, by Tim Peters
...
Namespaces are one honking great idea -- let's do more of those!
Run Code Online (Sandbox Code Playgroud)
oro*_*hen 20
您可以使用argparse.Namespace以下命令,而不是创建自己的对象:
from argparse import Namespace
ns = Namespace(**mydict)
Run Code Online (Sandbox Code Playgroud)
做反过来:
mydict = vars(ns)
Run Code Online (Sandbox Code Playgroud)
Tha*_*ava 17
这是将一个局部空间中的变量导入另一个局部空间的完全有效的情况,只要知道他/她正在做什么.我已经看到这样的代码多次以有用的方式使用.只需注意不要污染共同的全球空间.
您可以执行以下操作:
adict = { 'x' : 'I am x', 'y' : ' I am y' }
locals().update(adict)
blah(x)
blah(y)
Run Code Online (Sandbox Code Playgroud)
将变量导入本地名称空间是一个有效的问题,通常用于模板框架.
从函数返回所有局部变量:
return locals()
Run Code Online (Sandbox Code Playgroud)
然后导入如下:
r = fce()
for key in r.keys():
exec(key + " = r['" + key + "']")
Run Code Online (Sandbox Code Playgroud)