失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python可选参数位置_每个位置参数的可选参数

python可选参数位置_每个位置参数的可选参数

时间:2023-04-07 05:04:25

相关推荐

python可选参数位置_每个位置参数的可选参数

下面是我整理的一个简单的方法,可能是一个合理的起点:import argparse

class PositionalAction(argparse.Action):

def __call__(self,parser,namespace,values,option_string=None):

lst = getattr(namespace,self.dest)

lst.append(values)

parser.last_positional_values = lst

all_positional = getattr(namespace,'all_positional',[])

all_positional.append(lst)

namespace.all_positional = all_positional

class AssociateAction(argparse.Action):

def __call__(self,parser,namespace,values,option_string=None):

try:

parser.last_positional_values.append(values)

except AttributeError:

pass

parser = argparse.ArgumentParser()

parser.add_argument('-o',action=AssociateAction,dest=argparse.SUPPRESS)

junk,unknown = parser.parse_known_args()

for i,_ in enumerate(unknown):

parser.add_argument('arg%d'%i,action=PositionalAction,default=[])

print parser.parse_args()

在这里,它正在发挥作用:

^{pr2}$

这个问题有一些挑战。首先,要接受argparse不喜欢的任意数量的位置参数。argparse想预先知道会发生什么。解决方案是构建一个解析器并解析命令行,但是告诉argparse只解析已知的参数(在本例中,非位置的-o参数都是静默解析的,但是“位置”参数不会被解析)。parse_known_args非常适合这一点,因为它以(namespace_of_parsed_stuff, uknown_args)的形式返回一个元组。现在我们知道了未知参数,我们只需要为每个参数添加一个位置参数,以使parse_args满意。在

现在,自定义操作实际上在做什么?当找到一个位置参数(在第二个过程中),我们得到默认值(这是一个列表),并将值添加到该列表中(以后我将称之为“值”列表)。然后,我们使用对“value”列表的引用修改解析器。我们还从名称空间中获得“所有位置”列表。如果它没有这个属性,我们只得到一个空列表。我们将“值”列表添加到“所有位置”列表中,并将其放回名称空间。在

现在,当我们碰到一个-o标志时,我们查看解析器以获得“value”列表,并将附加值添加到该列表中。我们可以在不接触解析器的情况下做同样的事情。。。(我们可以看一下namespace.all_positional[-1]它与parser.last_positional_values相同)。在

如果觉得《python可选参数位置_每个位置参数的可选参数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。