Python:从命名空间中提取变量

Lem*_*ing 8 python command-line-arguments argparse

我在python中使用argparse来解析命令行参数:

parser = ArgumentParser()
parser.add_argument("--a")
parser.add_argument("--b")
parser.add_argument("--c")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

现在我想要做一些计算用a,bc.但是,我发现一直写的很烦人args.a + args.b + args.c.

因此,我正在提取这些变量:

a, b, c = [args.a, args.b, args.c]
Run Code Online (Sandbox Code Playgroud)

这样我就可以写了a + b + c.

有更优雅的方式吗?

添加许多参数时,手动提取变得非常繁琐且容易出错.

kin*_*all 8

如果你想要它们作为全局变量,你可以这样做:

globals().update(vars(args))
Run Code Online (Sandbox Code Playgroud)

如果您在函数中并希望它们作为该函数的局部变量,则可以在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.
Run Code Online (Sandbox Code Playgroud)

这个技巧在Python 3中不起作用,exec它不是一个声明,也不适用于其他Python变体,如Jython或IronPython.

但总的来说,我建议只使用较短的名称作为args对象,或使用剪贴板.:-)