1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82


# 函数参数:
# 实参: 函数调用时括号中的参数
# 形参: 函数定义时括号中的参数

# x,y是位置参数/必需参数

def f(x, y): # 这里的x是形参, x=1
print(x)


f(1, 2) # 1, 这里的1是实参


# 默认参数
def f2(x, y=3):
print(x, y)


f2(1, 2) # 1 2
f2(1) # 1 3


# 关键字参数
def f3(x, y=3, z=4):
print(x, y, z)


f3(10) # 10 3 4
f3(10, 20) # 10 20 4
f3(10, 20, 30) # 10 20 30

f3(10, z=30) # z是关键字参数, 10 3 30
f3(x=10) # 10 3 4

print()

# 可变参数/不定长参数
# *args: 可以接收任意多个(0~n)位置参数, 得到的值是一个元组
# **kwargs: (keyword arguments) 可以接收任意多个(0~n)关键字参数, 得到的值是一个字典
def f4(x, y, *args):
print(x, y, args)

f4(10, 20, 30, 40, 50) # 10 20 (30, 40, 50)
f4(1, 2, 3) # 1 2 (3,)


def f5(x, y, **kwargs):
print(x, y, kwargs)

f5(1, 2) # 1 2 {}
f5(1, 2, z=3, k=4) # 1 2 {'z': 3, 'k': 4}



# 形参参数顺序: 位置参数, *args, 默认参数, **kwargs
# 实参参数顺序: 位置参数, 关键字参数

def f6(x, y, *args, z=3, **kwargs):
print(x, y, args) # 1 2 (3, 4, 5)
print(z, kwargs) # 6 {'k': 7, 'w': 8}


f6(1, 2, 3, 4, 5, z=6, k=7, w=8)


# 接收任意参数
def f7(*args, **kwargs):
print(args, kwargs)
# (1, 2, 3) {'x': 4, 'y': 5}

f7(1,2,3, x=4,y=5)