python argparse,如何按名称引用参数

1 投票
3 回答
602 浏览
提问于 2025-04-18 09:10

这是一个关于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__)

撰写回答