马儿慢些走

人生惶惶,悲喜一场。

Python argparse库 nargs参数(KIMI)

本文为和KIMI的对话记录,仅供参考:


nargs 是 Python 标准库 argparse 中用于指定命令行参数“应该消费多少个值”的关键参数。它决定了解析器在碰到该参数时,应该把它后面连续的多少个单词(以空格分隔)打包成一个列表赋给该参数。


1. 取值与含义速查表

取值 含义 示例命令行 得到的 Python 值
未给出(默认) 只消费 1 个值 --tag A 'A'
N(正整数) 恰好 N 个值 --coord 1.2 3.4 [1.2, 3.4]
? 0 或 1 个值 -v-v 4 True4
* 0 到任意多个值 --file a.txt b.txt ['a.txt','b.txt']
+ 1 到任意多个值(至少 1 个) --id 5 6 [5, 6]
argparse.REMAINDER 把“剩余所有”打包 cmd --foo bar baz ['bar','baz']

2. 逐项详解

2.1 默认(nargs 省略)

parser.add_argument('--name')
  • 只能给一次,值是字符串。
  • 重复给出会报错。

2.2 固定个数 N

parser.add_argument('--point', nargs=2, type=float)
  • 必须一次性给足 2 个值,否则抛 ValueError
  • 解析后得到的是长度为 2 的列表:[1.2, 3.4]

2.3 可选值 ?

parser.add_argument('-q', '--quiet', nargs='?', const=True, default=False)
  • 不带值:得到 const 指定的值(这里是 True)。
  • 带值:得到用户给的值。
  • 常用来实现“开关”或“可选带参”的场景。

2.4 任意多值 *

parser.add_argument('src', nargs='*')
  • 可以 0 次或多次,解析后是列表。
  • 位置参数里用 * 可实现“可选的源文件列表”。

2.5 至少一次 +

parser.add_argument('--id', nargs='+', type=int)
  • 不给会报错;给 1 个或多个均可。
  • 结果一定是非空列表。

2.6 argparse.REMAINDER

parser.add_argument('args', nargs=argparse.REMAINDER)
  • 把“遇到该参数之后的所有剩余单词”全部收进来,不再解析选项。
  • 常用于封装子命令或透传参数给下游程序。

3. 易踩的坑

  1. 列表永远返回列表
    即使 nargs=1,结果也是长度为 1 的列表,而不是标量。

  2. 位置参数与可选参数混用
    当位置参数带 nargs='*'+ 时,它会把后面所有非选项单词“吃光”,导致后面的位置参数得不到值。解决:

    • 把可变长位置参数放最后;
    • 或用 -- 强制结束选项解析。
  3. 默认值与 const 区别
    default 是“用户根本没出现该参数”时的回退值;
    const 是“用户写了参数但没带值”时的回退值;二者互不冲突。


4. 完整小例子

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--nums', nargs='+', type=int,
                    help='至少给一个整数')
parser.add_argument('--sum', action='store_true',
                    help='对 nums 求和')

args = parser.parse_args()
if args.sum:
    print(sum(args.nums))
else:
    print(args.nums)

运行:

$ python demo.py -n 1 2 3 --sum
6

5. 一句话总结

nargs 就是告诉 argparse:“这个参数后面要吞掉几个单词,打包成列表给我。” 掌握上面 6 种取值,就能灵活应对各种命令行接口需求。

posted on 2025-09-18 20:01  马儿慢些走  阅读(17)  评论(0)    收藏  举报

导航