python – argparse条件参数结构
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – argparse条件参数结构,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2704字,纯文字阅读大概需要4分钟。
内容图文
![python – argparse条件参数结构](/upload/InfoBanner/zyjiaocheng/771/5f2665a30ead42a28dbf455c4b82abaa.jpg)
我想使用argparse,因此提供的参数数量决定了执行哪个子例程.
例如,在下面的脚本中,我希望argparse能够执行以下操作:
dmsconvert.py 12.5
>>> (12, 30, 0)
dmsconvert.py 12 30 0.0
>>> 12.5
相反,我能用argparse做到这一点的唯一方法是有一个明确的选项,即:
dmsconvert.py 12.5
>>> (12, 30, 0)
dmsconvert.py -a 12 30 0.0
>>> 12.5
任何人都可以建议使用argparse实现我的首选方法吗?
注意:我希望自动生成的argparse帮助文本看起来合理.
完整代码示例:
import argparse
import sys
def dms_to_decimal(deg,min,sec):
assert float(min) < 60.0, 'Mintue value: %s must be less than 60' % float(min)
assert float(sec) < 60.0, 'Second value: %s must be less than 60' % float(sec)
return float(deg)+float(min)/60.0+float(sec)/(60.0*60.0)
def decimal_to_dms(deg):
min = 60.0*(deg-int(deg))
sec = 60.0*(min-int(min))
return int(deg),int(min),sec
parser = argparse.ArgumentParser(description = 'Convert decimal degrees to dms and visa versa')
parser.add_argument('-a',dest='dms_args',nargs=3)
parser.add_argument(dest='dec_arg',type=float,nargs='?')
args = vars(parser.parse_args(sys.argv[1:]))
if args['dms_args'] is not None:
print dms_to_decimal(*args['dms_args'])
if args['dec_arg'] is not None:
print decimal_to_dms(args['dec_arg'])
解决方法:
它可以通过自定义操作完成:
import argparse
class OneOrThree(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
if len(values) == 1:
setattr(namespace, self.dest, values)
setattr(namespace, 'result', decimal_to_dms(*values))
elif len(values) == 3:
setattr(namespace, self.dest, values)
setattr(namespace, 'result', dms_to_decimal(*values))
else:
raise parser.error('Expected 1 or 3 arguments')
def dms_to_decimal(deg,minute,sec):
assert float(minute) < 60.0, 'Mintue value: %s must be less than 60' % float(minute)
assert float(sec) < 60.0, 'Second value: %s must be less than 60' % float(sec)
return float(deg)+float(minute)/60.0+float(sec)/(60.0*60.0)
def decimal_to_dms(deg):
minute = 60.0*(deg-int(deg))
sec = 60.0*(minute-int(minute))
return int(deg),int(minute),sec
parser = argparse.ArgumentParser(
usage='%(prog)s deg [minute, sec]',)
parser.add_argument('dms_args', nargs='+',
type=float,
action=OneOrThree,
metavar='deg [minute, sec]',
help='Given one arg, returns dms. Given three args, returns deg')
args = parser.parse_args()
print(args.result)
运行上面的行为会产生如下行为:
% test.py 12.5
(12, 30, 0.0)
% test.py 12 30 0.0
12.5
如果提供的参数数量不正确,则会引发错误:
% test.py 12 30
usage: test.py [-h] dms_args [dms_args ...]
test.py: error: Expected 1 or 3 arguments
帮助消息如下所示:
% test.py -h
usage: test.py deg [minute, sec]
positional arguments:
deg [minute, sec] Given one arg, returns dms. Given three args, returns deg
optional arguments:
-h, --help show this help message and exit
内容总结
以上是互联网集市为您收集整理的python – argparse条件参数结构全部内容,希望文章能够帮你解决python – argparse条件参数结构所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。