Mat*_*ner 2 python variables python-3.x
我正在尝试以编程方式在本地命名空间中定义几个变量:
for build_step in 'prepare', 'configure', 'make', 'stage', 'package', 'all':
p = build_subparsers.add_parser(build_step)
p.set_defaults(build_step=build_step)
if build_step != 'package':
p.add_argument('specfile')
locals()['build_'+build_step+'_parser'] = p
build_prepare_parser
Run Code Online (Sandbox Code Playgroud)
NameError: global name 'build_prepare_parser' is not defined
但是在运行此代码之后,尽管出现了,但我认为创建的变量实际上都不存在locals().我如何在Python 3.2中执行此操作?
我知道这locals()是一个坏主意,这就是我问这个问题的原因.
答案是:不要那样做.
如果要以编程方式存储值,请使用容器:
>>> d = dict()
>>> d['a'] = 5
Run Code Online (Sandbox Code Playgroud)
或者如果你真的必须创建一个容器类.
>>> class Container(object):
... pass
...
>>> c = Container()
>>> setattr(c, 'a', 5)
>>> c.a
5
Run Code Online (Sandbox Code Playgroud)
为什么不给它构建自己的命名空间?
class Build(dict):
def __init__(self):
self.__dict__ = self
build = Build()
for build_step in 'prepare', 'configure', 'make', 'stage', 'package', 'all':
p = build_subparsers.add_parser(build_step)
p.set_defaults(build_step=build_step)
if build_step != 'package':
p.add_argument('specfile')
build[build_step+'_parser'] = p
build.prepare_parser
Run Code Online (Sandbox Code Playgroud)