python 中的参数顺序
为了方便本文描述,将参数自定义为如下类型 【自定义 自定义 自定义 别纠结】
-
形参:
-
位置参数
-
默认参数
-
位置不定长
-
关键字不定长
-
-
实参:
-
位置实参
-
关键字实参
-
二、位置参数使用
def fn(a, b):
pass
-
a 和 b 为位置参数 形式的形参
-
调用时:
-
全部位置实参:
-
要求必须要 一 一对应
-
要求实参与形参数量必须对等
-
fn( 1, 2 )
-
-
全部关键字实参:
-
要求实参数量与形参需要对等
-
因为使用了关键字指定,顺序可以自定义
-
fn(b=3, a=4)
-
-
位置+关键字实参:
-
要求数量对等
-
此时位置参数必须写在关键字的前面
-
fn(1, b=4)
-
-
三、默认参数使用
def fn(a, b, c=3):
pass
-
a b 是位置的形参, c 是默认参数
-
定义时:
-
默认参数必须放置于位置参数后面,因为默认参数后只能放默认
-
-
调用时:
-
全部位置参数无默认值:
-
此时遵守位置参数规则即可,数量对等, 一 一对应
-
默认值参数走默认
-
fn(1,3)
-
-
全部位置参数有默认值
-
此时遵守位置参数必须先于关键字实参
-
fn(1,3,c=6) || fn(1, 3, 6)
-
-
全部关键字参数无默认值
-
此时遵守关键字参数规则,数量对等,可自定义顺序
-
默认值参数走默认
-
fn(b=4, a=4)
-
-
全部关键字参数有默认值
-
此时遵守关键字参数规则,数量对等,可自定义顺序
-
此时默认值只能通过关键字传入
-
fn(b=6, c=4, a=1)
-
-
四、位置不定长 + 关键字不定长
不定长指的是实参数 个数不确定,希望函数可以接收用户自义数量的实参
01 位置不定长**
-
定义时
-
函数定义时 设置 *args 形参,变量名可自定义
-
-
调用时
-
传入一定数量的位置参数
-
此时会自动的生成元组 args ,存放所有的位置参数值
-
02 关键字不定长
-
定义时
-
函数定义时 设置 **kwargs 形参,变量名可自定义
-
-
调用时
-
传入一定数量的关键字实参
-
自动生成字典存放关键字实参
-
五、参数位置及顺序总结
上述不同形式的形式可同时出现,调用时 实参需要满足对应的规律
01 定义时
-
如果只有位置+默认, 那么默认一定放置于位置之后
-
如果位置不定长 + 默认,建议将默认放置于位置不定长前
-
def fn(default=3, *args):
pass
# 此时虽然 *args 可以放置在 default 的前面,但是调用时容易出错
-
如果位置不定长 + 关键字不定长 + 默认同时存在,建议如下
-
def fn(default=3, *args, **kwargs):
pass
# 此时 default 必须在 **kwargs 的前面,不然无法区分哪个是默认形参
02 调用时
如果定义时的顺序敲定了,调用时实参按着形参的规则来走就可以