栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python argparse位置参数和子命令

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python argparse位置参数和子命令

起初,我认为与jcollado相同,但是事实是,如果后续(顶层)位置参数具有特定的

nargs
nargs
=
None
nargs
=整数),那么它将按您期望的那样工作。当
nargs
is
'?'
或or
'*'
时,它有时会失败
'+'
。因此,我深入研究了代码,以了解发生了什么。

归结为将参数拆分为消耗形式的方式。为了弄清楚谁得到了什么,在您的情况下,调用会

parse_args
在字符串中汇总参数,例如
'AA'
,(
'A'
对于位置参数,
'O'
对于可选参数),并最终生成一个正则表达式模式以与该摘要字符串匹配,具体取决于您的操作已通过
.add_argument
.add_subparsers
方法添加到解析器。

在每种情况下,例如,参数字符串最终都是

'AA'
。变化的是要匹配的模式(您可以在
_get_nargs_pattern
in中看到可能的模式
argparse.py
。因为
subpositional
最终会存在
'(-*A[-AO]*)'
,这意味着
允许一个参数后跟任意数量的选项或参数 。对于
positional
,它取决于传递给
nargs

  • None
    =>
    '(-*A-*)'
  • 3 =>
    '(-*A-*A-*A-*)'
    '-*A'
    每个预期参数一个)
  • '?'
    =>
    '(-*A?-*)'
  • '*'
    =>
    '(-*[A-]*)'
  • '+'
    =>
    '(-*A[A-]*)'

这些模式被附加,对于

nargs=None
(您的工作示例),您最终得到
'(-*A[-AO]*)(-*A-*)'
,它与两组匹配
['A','A']
。这样,
subpositional
将仅解析
subpositional
(您想要的内容),同时
positional
匹配其动作。

因为

nargs='?'
,最终您得到
'(-*A[-AO]*)(-*A?-*)'
。第二组完全由 可选
模式组成,并且
*
是贪婪的,这意味着第一组将字符串中的所有内容都模糊不清,最终识别出这两个组
['AA','']
。当然,这意味着
subpositional
有两个参数,最终会令人窒息。

有趣的

nargs='+'
'(-*A[-AO]*)(-*A[A-]*)'
,for的模式 只要您仅传递一个参数就可以使用
。说
subpositional a
,因为您在第二组中至少需要一个位置参数。同样,由于第一组是贪婪的,所以传递
subpositional a b cd
会获得
['AAAA', 'A']
,这不是您想要的。

简而言之:一团糟。我猜这应该被认为是一个错误,但不确定将模式转变为非贪婪模式会带来什么影响…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号