| 参数的类型 | 函数的定义 | 函数的调用 | 备注 |
|---|
| 位置参数 | | √ | |
| 将序列中的每个元素都转换为位置实参 | | √ | 使用* |
| 关键字实参 | | √ | |
| 将字典中的每个键值对都转换为关键字实参 | | √ | 使用** |
| 默认值形参 | √ | | |
| 关键字形参 | √ | | 使用* |
| 个数可变的位置形参 | √ | | 使用* |
| 个数可变的关键字形参 | √ | | 使用** |
def fun(a, b, c): # a, b, c 在函数的定义处,所以是形式参数
print(a, b, c)
# 函数的调用
fun(10, 20, 30) # 函数调用时的参数传递,称为位置传参
lst = [11, 22, 33]
fun(*lst) # *表示在函数调用时,将列表中的每个元素都转换为位置实参传入
fun(a=100, c=300, b=200) # 函数的调用,所以是关键字实参
dic = {'a': 100, 'b': 222, 'c': 555}
fun(**dic) # **表示在函数调用时,将字典中的键值对都转换为关键字实参传入
10 20 30
11 22 33
100 200 300
100 222 555
def fun(a, b=10): # b在函数定义处,所以b是实参,进行赋值表现为默认值形参
print(a, b)
def fun2(*args): # 个数可变的位置形参
print(args)
def fun3(**args): # 个数可变的关键字形参
print(args)
fun2(10, 20, 30, 40)
fun3(a=11, b=22, c=33, d=44)
(10, 20, 30, 40)
{'a': 11, 'b': 22, 'c': 33, 'd': 44}
def fun4(a, b, c, d):
print(a, b, c, d)
# 调用fun4函数
fun4(10, 20, 30, 40) # 位置实参传递
fun4(a=10, b=20, c=30, d=40) # 关键字实参传递
fun4(10, 20, c=30, d=40) # 前两个是位置实参传递,后两个是关键字实参传递
10 20 30 40
10 20 30 40
10 20 30 40
def fun4(a, b, *, c, d): # 从*之后的参数,在函数调用时,只能采用关键字参数传递
print(a, b, c, d)
fun4(a=10, b=20, c=30, d=40)
fun4(10, 20, c=30, d=40)
10 20 30 40
10 20 30 40
# 函数定义处的形参的顺序问题
def fun5(a, b, *, c, d, **args):
pass
def fun6(*args, **args2):
pass
def fun7(a, b=10, *args, **args2):
pass