Python Fire:更加灵活的命令行参数

之前介绍过PythonFire库,一个用来生成命令行工具的的库。

请参考:Python Fire:自动生成命令行接口

今天,针对命令行参数,补充两种更加灵活的设置方式。

1. *args 型参数

*args型的参数可以接受任意长度的参数。

比如,模拟一个学校发送通知的功能:

python 复制代码
import fire

def notions(school, *names):
    for name in names:
        print(f"[{school} 通知] hello {name}")


if __name__ == "__main__":
    fire.Fire(notions)

使用起来很灵活,

powershell 复制代码
$  python.exe .\fire-sample.py NJ大学 小红 小李 小张 小华
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张
[NJ大学 通知] hello 小华

$  python.exe .\fire-sample.py --school NJ大学 小红 小李 小张
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张

$  python.exe .\fire-sample.py --school NJ大学 小红 小李 小张 小华
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张
[NJ大学 通知] hello 小华

$  python.exe .\fire-sample.py 小红 小李 --school NJ大学 小张 小华
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张
[NJ大学 通知] hello 小华

从上面使用的示例可看出,

  1. 可以不输入参数名称(比如第一个例子),按照顺序第一参数赋值给school,其余的赋值给*names
  2. *names参数支持不定长度的值
  3. school参数指定参数名的话,可以放在任意的位置(比如上面第四个例子)。

2. **kwargs 型参数

**kwargs 型参数也是不定长度的,和*args型参数不同的地方在于,

使用**kwargs型参数时,需要指定参数名称

比如,模拟一个显示学生成绩的功能:

python 复制代码
import fire

def scores(cls, **students):
    for k, v in students.items():
        print(f"[{cls} 成绩] {k}: {v}")


if __name__ == "__main__":
    fire.Fire(scores)

使用示例如下:

powershell 复制代码
$  python .\fire-sample.py 初三1班 --小红 98 --小李 89 --小王 100
[初三1班 成绩] 小红: 98
[初三1班 成绩] 小李: 89
[初三1班 成绩] 小王: 100

$  python .\fire-sample.py --小红 98 --小李 89 --小王 100  初三1班
[初三1班 成绩] 小红: 98
[初三1班 成绩] 小李: 89
[初三1班 成绩] 小王: 100

$  python .\fire-sample.py --小红 98 --小李 89 --小王 100 --cls 初三1班
[初三1班 成绩] 小红: 98
[初三1班 成绩] 小李: 89
[初三1班 成绩] 小王: 100

cls参数可以不指定名称,也可以放在任意位置上。
**students参数则必须指定参数名称,但参数名称不固定,参数的个数也不固定。

3. 总结

*args型和**kwargs型参数可以有效的缓解命令行工具灵活性不足的问题。

开发命令行工具时,根据自己的场景,使用这两种类型的参数可让命令行工具的接口更加简洁灵活。

相关推荐
数据知道19 小时前
claw-code 源码详细分析:命令宇宙 vs 工具宇宙——`commands` / `tools` 镜像清单如何驱动路由与 shim 执行?
linux·服务器·网络·python·ai·claude code
郝学胜-神的一滴19 小时前
Pytorch自动微分模块:从原理到实战,解锁反向传播核心奥秘
服务器·人工智能·pytorch·python·深度学习·机器学习
CappuccinoRose19 小时前
排序算法和查找算法 - 软考备战(十五)
数据结构·python·算法·排序算法·查找算法
lifallen19 小时前
Flink Agents:从 DataStream 到 Agent 算子的接入与装配
java·大数据·人工智能·python·语言模型·flink
做cv的小昊20 小时前
【conda】打包已有conda环境并在其他服务器上搭建
运维·服务器·python·conda·运维开发·pip·开发
Hommy8820 小时前
【开源剪映小助手-客户端】目录扫描功能
python·开源·aigc·剪映小助手
Pocker_Spades_A20 小时前
Python快速入门专业版(五十六)——爬虫会话管理:Cookie与Session原理及实战(保持登录状态)
开发语言·爬虫·python
MwEUwQ3Gx20 小时前
深入理解 Java Deque 的设计哲学
java·开发语言·python
MoRanzhi120320 小时前
scikit-learn 决策树分类详解:从原理、可视化到剪枝实战掌握 DecisionTreeClassifier
python·决策树·机器学习·数学建模·分类·scikit-learn·剪枝
财经资讯数据_灵砚智能20 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月5日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程