在blargument解析器内部合并参数。
项目描述
Blargparse扩展了argparse.ArgumentParser,添加了一个add_aggregate方法,可以帮助您将用户界面逻辑与其他所有内容分离。
如何使用
从PyPI安装。
pip install blargparse
这是使用它的最简单方法。
b = BlargParser()
b.add_argument('--left', '-l', type = int, default = 0)
b.add_argument('--right', 'r', type = int, default = 100)
b.add_aggregate('numbers', lambda args: range(args.left, args.right))
b.parse_args([]).numbers == range(0, 100)
您可以让它更复杂。
b = BlargParser()
b.add_argument('--left', '-l', type = int, default = 0)
b.add_argument('--right', 'r', type = int, default = 100)
def f(args):
output = range(args.left, args.right)
del(args.left, args.right)
b.add_aggregate(f)
b.parse_args([]).numbers == range(0, 100)
为什么
我编写Blargparse是因为我发现自己在做类似的事情。
# Construct the parser.
a = argparse.ArgumentParser()
a.add_argument('--left', '-l', type = int, default = 0)
a.add_argument('--right', 'r', type = int, default = 100)
# Parse the arguments
import sys
ns = a.parse_args(sys.argv)
# Convert them into the form I want for my application.
numbers = range(ns.left, ns.right)
在编写这个程序的过程中,我觉得最有意义的输入参数是数字范围,但我认为如果最终用户可以将这个范围指定为--left和--right标志的组合,会更容易。我可能根据用户似乎更喜欢的选项来改变这个。
上面的方法很好,因为它是小的,但我有几个这样的参数分散在几个子解析器中,而且构造、解析和参数的转换因此分散在函数甚至文件中。
使用纯argparse,我最终做了一些像这样的事情。
def _build_subparsers(argparser):
'This adds subparsers to the parser.'
subparsers = argparser.add_subparsers()
# ...
def _apply_aggregates(args):
args.range = range(args.left, args.right)
del(args.left, args.right)
argparser = argparser.ArgumentParser()
_build_subparsers(argparser)
args = argparser.parse_args()
_apply_aggregates(args)
这比以前好一些,但是它将子解析器组合在一起并聚合在一起。我想让子解析器与相关的聚合组合在一起,并且我不希望根据某些内容是子解析器还是聚合来分组;我认为聚合是子解析器的组成部分。
一个更令人困惑的替代方案可能是在这个基础上创建自己的非argparse接口,用于指定子解析器和聚合的分组。
项目详情
关闭
blargparse-0.0.3.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 7592d9607d48242cff024c2d4da798e5ee27f65864709392b7690f6bd397611c |
|
| MD5 | e10d5653da84cdf70bce342f2c7887d7 |
|
| BLAKE2b-256 | bfb5b04ef8247a09fe8a1a6074c176e991b777b0a71af7ac54eb2d2ebdd2d1db |