8

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

parser = ArgumentParser()
parser.add_argument("--a")
parser.add_argument("--b")
parser.add_argument("--c")
args = parser.parse_args()

现在我想用 , 和 进行a一些b计算c。但是,我觉得一直写很累args.a + args.b + args.c

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

a, b, c = [args.a, args.b, args.c]

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

有没有更优雅的方式来做到这一点?

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

4

2 回答 2

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 中不起作用,其中exec不是语句,在其他 Python 变体(例如 Jython 或 IronPython)中也不太可能。

不过,总的来说,我建议只为args对象使用较短的名称,或者使用剪贴板。:-)

于 2011-11-29T05:35:14.757 回答
0

您可以通过调用将内容添加到本地范围locals()。它返回一个表示当前可用范围的字典。您也可以为其分配值 -locals()['a'] = 12将导致在a本地范围内,值为 12。

于 2011-11-29T05:31:30.657 回答