为了方便本文描述,将参数自定义为如下类型 【自定义 自定义 自定义 别纠结】
形参:
位置参数
默认参数
位置不定长
关键字不定长
实参:
位置实参
关键字实参
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 调用时
如果定义时的顺序敲定了,调用时实参按着形参的规则来走就可以
原文:https://www.cnblogs.com/yyshi/p/10695465.html