Python | 参数
一、位置参数
二、默认参数
三、关键字参数
四、可变参数
五、字典参数
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 """
【本文仅用于学习交流】