经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python Fire:更加灵活的命令行参数
来源:cnblogs  作者:wang_yb  时间:2024/2/7 9:54:52  对本文有异议

之前介绍过PythonFire库,一个用来生成命令行工具的的库。
请参考:Python Fire:自动生成命令行接口

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

1. *args 型参数

*args型的参数可以接受任意长度的参数。
比如,模拟一个学校发送通知的功能:

  1. import fire
  2. def notions(school, *names):
  3. for name in names:
  4. print(f"[{school} 通知] hello {name}")
  5. if __name__ == "__main__":
  6. fire.Fire(notions)

使用起来很灵活,

  1. $ python.exe .\fire-sample.py NJ大学 小红 小李 小张 小华
  2. [NJ大学 通知] hello 小红
  3. [NJ大学 通知] hello 小李
  4. [NJ大学 通知] hello 小张
  5. [NJ大学 通知] hello 小华
  6. $ python.exe .\fire-sample.py --school NJ大学 小红 小李 小张
  7. [NJ大学 通知] hello 小红
  8. [NJ大学 通知] hello 小李
  9. [NJ大学 通知] hello 小张
  10. $ python.exe .\fire-sample.py --school NJ大学 小红 小李 小张 小华
  11. [NJ大学 通知] hello 小红
  12. [NJ大学 通知] hello 小李
  13. [NJ大学 通知] hello 小张
  14. [NJ大学 通知] hello 小华
  15. $ python.exe .\fire-sample.py 小红 小李 --school NJ大学 小张 小华
  16. [NJ大学 通知] hello 小红
  17. [NJ大学 通知] hello 小李
  18. [NJ大学 通知] hello 小张
  19. [NJ大学 通知] hello 小华

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

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

2. **kwargs 型参数

**kwargs 型参数也是不定长度的,和*args型参数不同的地方在于,
使用**kwargs型参数时,需要指定参数名称

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

  1. import fire
  2. def scores(cls, **students):
  3. for k, v in students.items():
  4. print(f"[{cls} 成绩] {k}: {v}")
  5. if __name__ == "__main__":
  6. fire.Fire(scores)

使用示例如下:

  1. $ python .\fire-sample.py 初三1 --小红 98 --小李 89 --小王 100
  2. [初三1 成绩] 小红: 98
  3. [初三1 成绩] 小李: 89
  4. [初三1 成绩] 小王: 100
  5. $ python .\fire-sample.py --小红 98 --小李 89 --小王 100 初三1
  6. [初三1 成绩] 小红: 98
  7. [初三1 成绩] 小李: 89
  8. [初三1 成绩] 小王: 100
  9. $ python .\fire-sample.py --小红 98 --小李 89 --小王 100 --cls 初三1
  10. [初三1 成绩] 小红: 98
  11. [初三1 成绩] 小李: 89
  12. [初三1 成绩] 小王: 100

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

3. 总结

*args型和**kwargs型参数可以有效的缓解命令行工具灵活性不足的问题。
开发命令行工具时,根据自己的场景,使用这两种类型的参数可让命令行工具的接口更加简洁灵活。

原文链接:https://www.cnblogs.com/wang_yb/p/18007891

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号