我正在开发一个包含几个python脚本的工具箱。对于其中的一些脚本来说,一些参数可能是数值。根据脚本的不同,一些脚本可能要求值v介于-1和1之间,或者0和1之间,或者1和10之间,或者......一个例子可以是输出图的页面宽度,它应该总是正数。
我可以一直检查v是否在所需的范围内,也可以使用argparse为每个范围定义一个Action或类型,下面给出了一个使用新类型的示例:
def positive_num(a_value):
"""Check a numeric positive."""
if not a_value > 0:
raise argparse.ArgumentTypeError("Should be positive.")
return a_value
并稍后将其添加到解析器中:
parser_grp.add_argument('-pw', '--page-width',
help='Output pdf file width (e.g. 7 inches).',
type=positive_num,
default=None,
required=False)
现在,如果值是一个相关系数(或范围内的任何值),是否可以使用action或types编写更一般的内容:
def ranged_num(a_value, lowest=-1, highest=1):
"""Check a numeric is in expected range."""
if not (a_value >= lowest and a_value <= highest):
raise argparse.ArgumentTypeError("Not in range.")
return a_value
以后可以这样添加:
parser_grp.add_argument('-c', '--correlation',
help='A value for the correlation coefficient',
type=ranged_num(-1,1),
default=None,
required=False)
我试过几种方法,但都没有成功。
谢谢
1条答案
按热度按时间kg7wmglp1#
根据文件:
type=
可以接受任何接受单个字符串参数并返回转换值的可调用对象因此,要像
type=ranged_num(-1,1)
那样使用它,ranged_num
函数必须 * 返回一个函数 * 本身。返回一个函数(或接受一个函数作为参数,或两者都有)的函数通常被称为"高阶函数"。下面是一个简单的例子:
现在
ranged_num
创建并返回一个函数type_func
,该函数负责处理来自命令行的字符串。