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 """

 

【本文仅用于学习交流】

 

posted @ 2019-07-26 16:27  机器快点学习  阅读(236)  评论(0编辑  收藏  举报