python 参数定义库argparse

这一块的官方文档在这里

注意到这个库是因为argparse在IDE中和在ipython notebook中使用是有差异的,习惯了再IDE里面用,转到ipython中会报错,究其原因,还是对库的本质不够理解。

打开argparse.py,里面有很多class,但是,实际笨妞貌似只用过ArgumentParser。ArgumentParser是用来创建argparse类的。

一般的应用过程是这样的:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)') args = parser.parse_args()
print(args.accumulate(args.integers))

包含了创建参数类,添加参数,存储和使用参数。

执行如下命令:

python xx.py 1 2 3 4

结果:

4

ArgumentParser可配置的参数很多,如下图,但大多都没必要配置的。

add_argument添加参数,这个方法配置参数来告诉系统命令行如何传输参数进来。可配置的参数如下:

* name or flags - 名称或选项字符串列表, e.g. foo or -f, --foo.
* action - 参数如果定义了选项,表示这是一个操作参数,至于调用时做哪种操作由用户输入或者default决定。
* nargs - 应该使用的命令行参数数。.
* const - 某些动作或参数个数的常数值。.
* default - 如果命令行没有对输入这个参数相应的值,则此参数用default给出的值.
* type -将用户输入的值转化为哪种类型.
* choices - 参数可输入值的范围或选择.
* required - 命令行输入的值是否可以被忽略(布尔量).
* help - 参数的简要描述.
* metavar - useage中显示的参数的名称.
* dest - 要添加到解析参数返回的对象中的属性的名称.

parser_args将解析参数传递到一个空间中,后续可以通过变量访问。

* args - 要解析的字符串序列,默认值取自sys.argv。List of strings to parse. The default is taken from sys.argv.
* namespace -一个接受属性的对象。默认是一个新的空命名空间对象。

通过IDE和ipython使用argparser的差异就在“args = parser.parse_args()”。IDE中parse_args()可以直接使用,只要在命令行执行时,要求必须设置的参数给都值了就没有问题,如果所有参数都有默认值,py文件执行时,不给参数也不会出错。而ipython 在parse_args()这句必须配置args,即便add_argument添加的参数都有默认值也要在配置args,不然执行会报如下错误:

ipykernel_launcher.py: error: unrecognized arguments: -f C:\Users\Administrator\AppData\Roaming\jupyter\runtime\kernel-eeea08d1-8918-441d-9352-59cae31c447e.json
An exception has occurred, use %tb to see the full traceback. SystemExit: 2

对于含有必须输入值的函数,这个问题是合理的,因为ipython里面读参数不通过命令行,必须通过parse_args传值。

但是,如下程序

import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('--a_para', default=2, type=int, required=False,
help='first parameter')
parser.add_argument('--b_para', default=3,type=int, required=False,
help='second parameter')
args = parser.parse_args()
print(args.a_para, args.b_para)

直接在IDE中运行,不通过命令行,不传参数便可以成功.

2 3

但在ipython中必须是这样的

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('--a_para', default=2, type=int, required=False,
help='first parameter')
parser.add_argument('--b_para', default=3,type=int, required=False,
help='second parameter') args = parser.parse_args(['--a_para', '2']) #至少输入一个参数
print(args.a_para, args.b_para)

输出:

2 3

是不是很无厘头,然而就是这样的。

python 参数定义库argparse的更多相关文章

  1. python之定义参数模块argparse(二)高级使用 --传参为函数的实现

    我们在文章python之定义参数模块argparse的基本使用中介绍了argparse模块的基本使用方法 当前传入的参数只能是int.str.float.comlex类型,不能为函数,这有点不方便,但 ...

  2. python之定义参数模块argparse(一)基本使用

    在shell脚本中,若脚本带参数,则在脚本中使用$1.$2...等引用, 在python中,也可以定义类似的引用参数,可以为必选项也可以可选项. 基本用法如下三种: 1.必选项(位置参数) impor ...

  3. python命令行参数解析模块argparse和docopt

    http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...

  4. Python 命令行参数解析工具 argparse

    为什么需要argparse 开门见山,举一个简易计算器代码的例子,其中sys.argv用来读取脚本执行时后面传入的参数. def calculator(x, y, operation): if &qu ...

  5. Python命令行参数定义及注意事项

    在命令行中运行python代码是很常见的,下面介绍如何定义命令后面跟的参数. 常规用法 Python代码中主要使用下面几行代码来定义并获取需要在命令行中赋值的参数: import argparse p ...

  6. Python命令行解析库argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...

  7. python之参数解析模块argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 简单入门 先来看个例子: argparse_test.py: import ...

  8. 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)

    详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类   Python中函数参数定义及调用函数时传参 ...

  9. python 函数的参数定义及调用

    参数定义:1. 位置参数:    这是熟悉的标准化参数,位置参数必须在调用函数中定义的准确顺序来传递,在没有默认参数的情况下,传入参数    的精确数目必须和声明的数目一致. def foo(who, ...

随机推荐

  1. ShopNC B2B2C最新版去除shop方法教程

    1.转移shop下目录文件至根目录: 2.修改config.ini.php里的shop绑定域名更改为无shop目录: 3.将原始根目录的index.php更改为main.php文件名自己定!并修改in ...

  2. 前端每日实战:57# 视频演示如何用纯 CSS 创作一双黑暗中的眼睛

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xzYVzO 可交互视频 此视频是可 ...

  3. tomcat7以下线程控制

    web server允许的最大线程连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右. 1.编辑tomcat安装目录下的conf目录下的server. ...

  4. 将已有的lng lat 字段转换成point类型字段

    利用拼接字符串转换point select GeomFromText(CONCAT('POINT(',lng,' ',lat,')')) from community limit 1; 插入字段到新表 ...

  5. 【SQL】链接服务器

    最近做项目,需要对两个数据库进行同步操作,所以采用在Server SQL中建立链接服务器方式实现. 链接服务器,可以直接访问/操作其他服务器上的数据库表. 1.连接SQL Server链接服务器 EX ...

  6. 11. Django及数据库环境搭建

    项目背景 我们做功能测试的时候知道,一个产品基本上都会有增删改查功能,对应接口也就是增删改查接口.做了2年接口自动化测试,觉得最难的点应该是数据的初始化,其实测试一个接口.对接口使用单元测试框架.生成 ...

  7. switch gnome-terminal tabs

    Ctrl+Page Down (forward) and Ctrl+Page Up (backward). http://unix.stackexchange.com/a/67963

  8. vue input框type=number 保留两位小数自定义组件

    第一步:自定义组件MyNumberInput.vue<template> <input class="numberInput" type="number ...

  9. 20140914 1到N自然数排序

    1.关于一道1到N自然数排序的华为面试题 http://blog.csdn.net/hongyuan19/article/details/1887656 为什么想进入华为 你对华为了解多少? 华为给我 ...

  10. ios兼容问题

    滑动卡顿: -webkit-overflow-scrolling:touch;