在使用python命令行解析包argparse的时候,遇到了parse_args()parse_known_args()两种用法,遂查资料搞清楚两个函数的差别并记录。

1 parse_args()

直接举例子说明。

  1. 新建test.py文件,代码如下:

    import argparse
    parse = argparse.ArgumentParser()
    parse.add_argument('--flag_int', type=int, default=2, help='flag_int')
    opt1 = parse.parse_args()
    print(opt1)#  opt2 = parse.parse_known_args()
    #  print(opt2)
    #  print(opt2[0])
    #  print(opt2[1])
    
  2. 在终端输入下面的命令并执行:
    python test.py --flag_int 3
    

    输出结果:

    Namespace(flag_int=3)
    

    可以看出parse_args()函数返回的是一个命名空间(NameSpace),这个NameSpace中有一些变量,就是我们add_argument()的那些参数。

  3. 如果在终端输入下面的命令并执行:
    python test.py --flag_int 3 --flag_float 0.3
    

    可以看到命令比add_argument()的多了一个参数,当然会报错:

    usage: test.py [-h] [--flag_int FLAG_INT]
    test.py: error: unrecognized arguments: --flag_float 0.3
    

    parse_known_args()则解决了这个问题。

2 parse_known_args()

同样直接用简单的例子说明问题。

  1. 将test.py的代码改为:

    import argparse
    parse = argparse.ArgumentParser()
    parse.add_argument('--flag_int', type=int, default=2, help='flag_int')
    #  opt1 = parse.parse_args()
    #  print(opt1)opt2 = parse.parse_known_args()
    print(opt2)
    print(opt2[0])
    print(opt2[1])
    
  2. 在终端输入下面的命令并执行:
    python test.py --flag_int 3
    

    输出结果:

    (Namespace(flag_int=3), [])
    Namespace(flag_int=3)
    []
    

    可以看出parse_known_args()返回的是一个有两个元素的元组,第一个元素是NameSpace,和parge_args()返回的NameSpace完全相同,第二个是一个空列表,列表的作用下面可以看出。

  3. 如果在终端输入下面的命令并执行:
    python test.py --flag_int 3 --flag_float 0.3
    

    可以看到命令比add_argument()的多了一个参数,但是并没有报错,输出结果如下:

    (Namespace(flag_int=3), ['--flag_float', '0.3'])
    Namespace(flag_int=3)
    ['--flag_float', '0.3']
    

可以看出,相对于上一条命令多余的东西,以空格为分节符,以字符串的形式存放在列表中。

parse_args()和parse_known_args()的用法和区别相关推荐

  1. python 类变量、实例变量、参数、实例方法、类方法、静态方法 的用法和区别

    #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : 类变量.实例变量.参数.实例方法.类方法 ...

  2. kmalloc/kfree,vmalloc/vfree函数用法和区别

    kmalloc/kfree,vmalloc/vfree函数用法和区别 1.kmalloc 1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. ...

  3. Javascript:history.go()和history.back()的用法和区别

    Javascript:history.go()和history.back()的用法和区别  简单的说就是:go(-1): 返回上一页,原页面表单中的内容会丢失:back(): 返回上一页,原页表表单中 ...

  4. set和enum类型的用法和区别

    mysql中的set和enum类型的用法和区别 mysql中的enum和set其实都是string类型的而且只能在指定的集合里取值, 不同的是set可以取多个值,enum只能取一个值.   1 2 3 ...

  5. PHP中MySQL、MySQLi和PDO的用法和区别

    MySQL 是 PHP 操作 MySQL 数据库最原始的 Extension.MySQLi 的 i 代表 Improvement ,提供了相对进阶的功能,就 Extension 而言,本身也增加了安全 ...

  6. Java-线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别

    Java线程中sleep().wait()和notify()和notifyAll().suspend和resume().yield().join().interrupt()的用法和区别 从操作系统的角 ...

  7. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别

    ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,C ...

  8. Java学习笔记1:Java中有关print、println、printf的用法和区别

    Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...

  9. Application,Session,Cookie和ViewState等对象用法和区别

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法             ...

最新文章

  1. 压力测试 闪存_产品评测 | HPE Nimble AF全闪存系列,诠释真正的高端存储
  2. 2021年机器学习的下一步是什么?
  3. ExtJs4–表格--Grid
  4. py文件打包或apk_Python文件打包成exe很简单,如果安卓手机也能运行的软件你会吗...
  5. 用python画画如何保存_python画图后怎么保存
  6. [转]C++中sleep()函数的使用
  7. 20175320 2018-2019-2 《Java程序设计》第4周学习总结
  8. .NET Core 3.0 构建和部署
  9. NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifest
  10. 在Oracle DG Standby库上启用flashback database功能
  11. It's a beautiful world!
  12. *printf()格式化串安全漏洞分析(上)
  13. FB是磁珠的符号,磁珠有很高的电阻率和磁导率,他等效于电阻和电感串联
  14. .NET Core 之 七 EF Core(五)
  15. staring mysql_mysql启动错误:Starting MySQL.. ERROR! The server quit without updating PID file错误...
  16. MFC检测程序未响应
  17. VC++获取磁盘剩余空间(附源码)
  18. 关于PGP的简单使用
  19. 美容美发美甲行业门店痛点和解决方案
  20. occt 几何图形库入门01

热门文章

  1. tools-ubuntu-网卡配置
  2. Winform 执行完 KeyPress后TextBox 文本多出来回车键符号(vbCrLf)解决方案
  3. poj 滑雪(DFS)||(DP+递归)
  4. 程序猿的爱情--2011-12-24
  5. 欧债危机再生变数,欧元续创年内新低
  6. 银行排队问题--事件链表+多窗口队列(数据结构课本)
  7. 人工智能对教育产业的冲击和机遇分析 ——网络文凭就是未来
  8. 【计算机毕业设计】679学生学籍管理系统
  9. linux命令中zxvf分别表示含义
  10. 用TELNET连接Socket服务器程序