Python argparse , add_argument, type = <some function> 而不是 int?
Python argparse , add_argument, type = <some function> rather than int?
在一个项目中,我看到 add_argument()
的以下用法:
parser = argparse.ArgumentParser()
parser.add_argument("--somearg",type=make_arg_instance,help='blahblahblah')
args = parser.parse_args()
i = args.somearg.somefunction()
其中 make_arg_instance
是定义为的函数:
def make_arg_instance():
somearg = SomeClassName()
return somearg
似乎参数 'somearg' 是一个 class
对象而不是 int
,这就是为什么后来调用了一个方法,如 i = args.somearg.somefunction()
.
在我见过的大多数教程中,参数类型始终是 int
因此有人可以解释一下如何添加类型 class
或 [=18 以外的任何类型的参数=]?谢谢!
来自documentation for the type
argument:
By default, ArgumentParser
objects read command-line arguments in as simple strings. However, quite often the command-line string should instead be interpreted as another type, like a float
or int
. The type
keyword argument of add_argument()
allows any necessary type-checking and type conversions to be performed.
[...]
type=
can take any callable that takes a single string argument and returns the converted value
您可以传入 任何可调用对象,前提是它需要一个要转换的参数。 int()
是这样一个可调用的,但这并不意味着您必须使用它。如果你想要一些 other 类型或者想对允许的值应用额外的约束,你可以指定你自己的。
在一个项目中,我看到 add_argument()
的以下用法:
parser = argparse.ArgumentParser()
parser.add_argument("--somearg",type=make_arg_instance,help='blahblahblah')
args = parser.parse_args()
i = args.somearg.somefunction()
其中 make_arg_instance
是定义为的函数:
def make_arg_instance():
somearg = SomeClassName()
return somearg
似乎参数 'somearg' 是一个 class
对象而不是 int
,这就是为什么后来调用了一个方法,如 i = args.somearg.somefunction()
.
在我见过的大多数教程中,参数类型始终是 int
因此有人可以解释一下如何添加类型 class
或 [=18 以外的任何类型的参数=]?谢谢!
来自documentation for the type
argument:
By default,
ArgumentParser
objects read command-line arguments in as simple strings. However, quite often the command-line string should instead be interpreted as another type, like afloat
orint
. Thetype
keyword argument ofadd_argument()
allows any necessary type-checking and type conversions to be performed.[...]
type=
can take any callable that takes a single string argument and returns the converted value
您可以传入 任何可调用对象,前提是它需要一个要转换的参数。 int()
是这样一个可调用的,但这并不意味着您必须使用它。如果你想要一些 other 类型或者想对允许的值应用额外的约束,你可以指定你自己的。