一、位置参数
二、默认参数
三、关键字参数
四、可变参数
五、字典参数
tip:
# parameter 形参
# argument 实参
一、位置参数
调用函数时根据函数定义的参数位置来传递参数
1 def test(a, b): # a和b都是位置参数
2 print(a)
3 print(b)
4
5
6 test(1,2)
二、默认参数
在定义函数时,已经设有默认值的参数。调用函数时可不传该默认参数的值(注意:无论是函数定义还是调用,所有位置参数都必须出现在默认参数前)
1 def test(a=1, b=2): # 此时调用test时,可以不写参数,a默认为1,b默认为2
2 print(a, end=",") # 可以发现print()中end= 的默认参数为 换行符
3 print(b)
4
5
6 test()
7 test(3, 4)
8 test(5) # 指定值时,只能从左开始,不能单蹦指定b
9
10 """
11 执行结果
12 1,2
13 3,4
14 5,2
15 """
16
17 # def test1(a=1, b):
18 # print(a)
19 # print(b)
20 #
21 #
22 # test2(3) # 3会给到a,b则没有参数传入。执行会报错:默认参数只能放在位置参数之后。
三、关键字参数
函数/方法在调用时,通过“键-值”形式,指定实参赋值的形参变量名,对应的实参称为关键字参数
即:为指定变量赋值
1 def test(a=100,b=200):
2 print(a)
3 print(b)
4
5
6 test(b=1) # 关键字参数。通过“键-值”形式,指定实参赋值的形参变量名(将1赋给b)
四、可变参数
函数/方法,在定义时,一个形参可以接收调用时传入的任意数量的实参,对应的形参称为可变参数
排列顺序:(位置参数,可变参数,关键字参数)
可变参数中包裹的是 不定个数的 位置参数
1 def sum(*args): # *args 为可变参数,传过来的是个元组,可以接收任意多的值
2 sums = 0
3 for num in args: # 拆包 不用加*了
4 sums += num
5 print(sums) # 15
6
7
8 sum(1, 2, 3, 4, 5)
当前面有位置参数时,可变参数只能捡剩
1 def sum(a, b, *args): # *args 只能捡剩
2
3 print(a) # 1
4 print(b) # 2
5 print(args) # (3, 4, 5) 是个元组哦
6
7
8 sum(1, 2, 3, 4, 5)
可变参数*args 后,放关键字参数
1 def sum(*args,a, b): # *args 后可以放关键字参数
2
3 print(a) # 4
4 print(b) # 5
5 print(args) # (1, 2, 3)
6
7
8 sum(1, 2, 3, a=4, b=5)
9
10 # def sum(a=1, b=2,*args): # 报错,所以 关键字参数必须放在可变参数之后
11 #
12 # print(a)
13 # print(b)
14 # print(args)
15 #
16 # sum(a=4, b=5, 1, 2, 3)
五、字典参数
字典参数定义格式
def 函数名(**形参)
函数体
调用:
函数名(未定义变量名 = 实参1···)
参数混用时的 顺序
(位置参数,可变参数,关键字参数,字典参数)
1 def test(**kwargs):
2 print(kwargs) # {'a': 1, 'n': 3}
3 for key in kwargs:
4 print(key, end=",")
5 print(kwargs[key])
6
7
8 test(a=1,n=3)
9
10 """
11 执行结果:
12 {'a': 1, 'n': 3}
13 a,1
14 n,3
15 """
字典参数和默认参数一起使用时,默认参数指哪儿打哪儿(好通俗的说法哈哈哈)
1 def test(m=1, **kwargs): # m 还是会对到实参里的m=5,指哪儿打哪儿
2 print(m)
3 print(kwargs)
4
5
6 test(a=1, m=5, n=3)
7
8 """
9 执行结果
10 5
11 {'a': 1, 'n': 3}
12 """
函数/方法多层级调用间的关键字参数传递
范例1:
1 # 任务 " hello python ni hao " ==》 "HELLO--PYTHON--NI--HAO--"
2
3 def change_str(s, **kwargs):
4 str1 =s.strip() # 移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
5 str2 = str1.upper()
6 return split_str(str2, **kwargs)
7
8
9 def split_str(s,end):
10 str1 = s.split(" ") # 从空格处切割字符串(空格被切掉了),并生成列表
11
12 for i in str1:
13 print(i, end=end)
14
15
16 change_str(" hello python ni hao ", end="--")
范例2:
1 def test1(a=1,**kwargs):
2 print(a)
3 return test2(**kwargs)
4
5
6 def test2(b=2):
7 print(b)
8
9
10 test1(a=3,b=4)
11
12 """
13 执行结果:
14 3
15 4
16 """