在不描述我的程序真正做了什么的情况下,让我告诉一个假用例,它应该足以证明我预期的参数用法。
假设我正在构建一个警报程序(同样,这是一个假用例,所以请不要开始告诉我我们在 Linux/Windows 中有本机警报)。它可以在特定的预定义时间(例如“早上”、“中午”)和给定的分钟数后发出警报。我希望我的命令接受这些用例:
$ python alarm_at.py morning
$ python alarm_at.py noon
$ python alarm_at.py evening
$ python alarm_at.py 1
$ python alarm_at.py 2
$ python alarm_at.py 3
...
限制是我只想为此目的使用一个位置参数。此外,可能还有我需要的其他位置参数,所以应该允许这样的事情:
$ python alarm_at.py loud morning long
$ python alarm_at.py low 3 short
在上面,我有两个假想的位置参数,分别指定了警报声的响度和长度。
如果你检查这个,你会发现这个:
type= 可以接受任何接受单个字符串参数并返回转换后的值的可调用对象
>>> def perfect_square(string):
... value = int(string)
... sqrt = math.sqrt(value)
... if sqrt != int(sqrt):
... msg = "%r is not a perfect square" % string
... raise argparse.ArgumentTypeError(msg)
... return value
...
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('foo', type=perfect_square)
>>> parser.parse_args(['9'])
Namespace(foo=9)
>>> parser.parse_args(['7'])
usage: PROG [-h] foo
PROG: error: argument foo: '7' is not a perfect square
因此,您可以创建一个接受所需值并将其设置为参数类型的函数。无论您是否以正确的顺序设置了多少个位置参数,都无关紧要required
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句