Python:从命名空间中提取变量
我在用Python的argparse库来解析命令行参数:
parser = ArgumentParser()
parser.add_argument("--a")
parser.add_argument("--b")
parser.add_argument("--c")
args = parser.parse_args()
现在我想用、和args.a + args.b + args.c
实在太麻烦了。
所以,我把这些变量提取出来:
a, b, c = [args.a, args.b, args.c]
这样我就可以直接写a + b + c
了。
有没有更简洁的方法来做到这一点呢?
手动提取变量在添加很多参数时会变得非常繁琐,而且容易出错。
2 个回答
0
你可以通过调用 locals()
来往本地作用域添加东西。这个函数会返回一个字典,里面包含了当前可用的作用域信息。你也可以给这个字典赋值,比如 locals()['a'] = 12
这行代码会让变量 a
在本地作用域中存在,并且它的值是 12。
9
如果你想把它们作为全局变量,可以这样做:
globals().update(vars(args))
如果你在一个函数里,并且想把它们作为这个函数的局部变量,你可以在Python 2.x中这样做:
def foo(args):
locals().update(vars(args))
print a, b, c
return
exec "" # forces Python to use a dict for all local vars
# does not need to ever be executed! but assigning
# to locals() won't work otherwise.
不过这个方法在Python 3中不管用,因为在Python 3里,exec
不是一个语句,其他一些Python变种,比如Jython或IronPython,可能也不行。
总的来说,我建议你直接给args
对象起个短一点的名字,或者用你的剪贴板。:-)