python argparse,如何按名称引用参数
这是一个关于Python中argparse的提问,可能非常简单。
import argparse
parser=argparse.ArgumentParser()
parser.add_argument('--lib')
args = parser.parse_known_args()
if args.lib == 'lib':
print 'aa'
这样做是可以的,但我不想每次都调用args.lib,我只想直接说'lib'(我不想多打字),有没有办法把所有的args变量导出到模块外面(也就是说改变作用域),这样我就可以直接检查lib的值,而不需要在前面加上模块名。
另外,我有很多变量,不想一个一个重新赋值。
3 个回答
0
当然可以... 但是能做到并不意味着你应该这么做... 不过为了好玩,globals().update(dict(args._get_kwargs()))
。
1
当然,只需要加一行代码,把 args.lib
赋值给 lib
就可以了。
import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-lib')
args = parser.parse_known_args()
lib = args.lib
if lib == 'lib':
print 'aa'
2
首先,我建议使用 args
这个参数说明符。这样可以很清楚地知道 lib
是从哪里来的。不过,如果你发现自己经常提到某个参数,可以给它起个更短的名字:
lib = args.lib
有一种方法可以一次性把所有属性放到全局命名空间里,但这对函数的局部命名空间是无效的。而且,除非有非常好的理由,否则使用 globals
不是个好主意。我认为仅仅为了省几个 args.
的实例并不足以成为一个好理由。不过,方法在这里:
globals().update(args.__dict__)