python什么是位置参数,Python和argparse的多个位置参数

关于位置参数的定义,srgerg是正确的.为了获得您想要的结果,您必须接受它们作为可选参数,并根据需要修改结果的命名空间.

您可以使用自定义操作:

class MyAction(argparse.Action):

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

# Set optional arguments to True or False

if option_string:

attr = True if values else False

setattr(namespace, self.dest, attr)

# Modify value of "input" in the namespace

if hasattr(namespace, 'input'):

current_values = getattr(namespace, 'input')

try:

current_values.extend(values)

except AttributeError:

current_values = values

finally:

setattr(namespace, 'input', current_values)

else:

setattr(namespace, 'input', values)

parser = argparse.ArgumentParser()

parser.add_argument('-a', nargs='+', action=MyAction)

parser.add_argument('-b', nargs='+', action=MyAction)

parser.add_argument('input', nargs='+', action=MyAction)

这就是你所得到的:

>>> parser.parse_args(['fileone', '-a', 'filetwo', '-b', 'filethree'])

Namespace(a=True, b=True, input=['fileone', 'filetwo', 'filethree'])

或者您可以修改结果的命名空间,如下所示:

>>> import argparse

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('-a', nargs='+')

>>> parser.add_argument('-b', nargs='+')

>>> parser.add_argument('input', nargs='+')

>>> result = parser.parse_args(['fileone', '-a', 'filetwo', '-b', 'filethree'])

>>> inputs = []

>>> inputs.extend(result.a)

>>> inputs.extend(result.b)

>>> inputs.extend(result.input)

>>> modified = argparse.Namespace(

a = result.a != [],

b = result.b != [],

input = inputs)

这就是你所得到的:

>>> modified

Namespace(a=True, b=True, input=['filetwo', 'filethree', 'fileone'])

但是,这两种方法都会导致较少的可读性和较少维护的代码.也许最好是改变程序逻辑,并以不同的方式进行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值