Reference - Liaoxuefeng: Arguments
Reference - Argparse official tutorial
Reference - Argparse official tutorial - CN
序言
这篇文章将更新一些关于 args(Argument) 的基础知识
Positional Arguments 位置参数
-
位置参数即最基本的参数,如下的x就是位置参数
def func(x): return x + x
Default Arguments 默认参数
-
调用以下函数
def func(x, y=2): return x + y
>>> func(5) 7 >>> func(5,3) 8
- 如果不给定参数值,默认参数就会用默认值填补
- 位置参数在前,默认参数在后
- 默认参数需要用不变的对象来定义
*args and **kwargs 可变参数和关键字参数
当我们不知道传入arguments的长度时,我们使用 *args
和 **kwargs
-
当传入的参数是 list 或 tuple 时,使用
*args
def adder(*number): sum = 0 for n in number: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6) # direct transfer list or tuple nums = [1, 2, 3] adder(*nums) # 类似于传数组的指针
在调用时,使用
*args
可以直接指定数据结构中的所有元素 -
当传入的参数是 dict 时,使用
**kwargs
(**kwargs
用于可选参数)def person(name, age, **kwargs): print('name:', name, 'age:', age, 'other:', kwargs) # other is optional >>> person('Michael', 30) name: Michael age: 30 other: {} >>> person('Bob', 35, city='Beijing') name: Bob age: 35 other: {'city': 'Beijing'} # direct transfer extra = {'city': 'Beijing', 'job': 'Engineer'} person('Jack', 24, **extra) # 类似于传数组的指针
keyword-only 命名关键字参数
-
在参数中只有一个
*
,之后的参数都被认为是keyword-onlydef person(name, age, *, city, job): print(name, age, city, job) >>> person('Jack', 24, city='Beijing', job='Engineer') # 输入时,city 和 job 必须显示表达 Jack 24 Beijing Engineer
参数顺序
Positional -> Default -> *args -> keyword-only -> **kwargs
函数的任意表达
任何函数都可以写为 func(*args, **kwargs)
Argparse 命令行接口编写
- 创建步骤
- 创建ArgumentParser() 对象
description=
用于说明功能
- 添加参数 add_argument()
- 解析参数 parse_args()
import argparse parser = argparse.ArgumentParser(decription='usage') parser.add_argument("echo") args = parser.parse_args()
- 创建ArgumentParser() 对象
- ArgumentParser的关键字
ArgumentParser.add_argument( name or flags... [, action] [, nargs] [, const] [, default] [, type] [, choices] [, required] [, help] [, metavar] [, dest])
name or flags
- 选项字符串的名字或者列表,例如 foo (位置参数)或者 -f, –foo (可选参数)。
action
- 命令行遇到参数时的动作,默认值是 store_true。 其他选项见 Reference - Argparse official tutorial - CN
nargs
- 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数.const
- action 和 nargs 所需要的常量值。
default
- 不指定参数时的默认值。
type
- 命令行参数应该被转换成的类型。
choices
- 参数可允许的值的一个容器。
required
- 可选参数是否可以省略 (仅针对可选参数)。
help
- 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
metavar
- 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
dest
- 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线. -
常见写法
parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.') parser.add_argument('--seed', type=int, default=72, help='Random seed.') parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')
-
可以将argparse封装起来使用:
def parseArgs(): parser = argparse.ArgumentParser() parser.add_argument("echo") return parser.parse_args() ... args = parseArgs()