Python argparse , add_argument, type = <some function> 而不是 int ?

use*_*086 1 python argparse

在一个项目中,我看到以下用途add_argument()

parser = argparse.ArgumentParser()
parser.add_argument("--somearg",type=make_arg_instance,help='blahblahblah')
args = parser.parse_args()
i = args.somearg.somefunction()
Run Code Online (Sandbox Code Playgroud)

其中make_arg_instance是一个函数,定义为:

def make_arg_instance():
    somearg = SomeClassName()
    return somearg
Run Code Online (Sandbox Code Playgroud)

看来参数 'somearg' 是一个class对象而不是int,这就是为什么后来调用一个方法,如i = args.somearg.somefunction().

在我见过的大多数教程中,参数的类型始终是int,因此有人可以解释一下如何添加类型class或除 之外的任何类型的参数吗int?谢谢!

Mar*_*ers 5

参数的文档type中:

默认情况下,ArgumentParser对象将命令行参数读取为简单字符串。然而,很多时候命令行字符串应该被解释为另一种类型,比如 afloatint。的type关键字参数add_argument()允许执行任何必要的类型检查和类型转换。

[...]

type=可以采用任何采用单个字符串参数并返回转换后的值的可调用函数

您可以传入任何 callable,只要它需要转换单个参数。int()是这样一个可调用的,但这并不意味着你必须使用它。如果您想要其他类型或想要对允许的值应用额外的约束,您可以指定您自己的类型。