1 #python中函数定义。def函数定义的关键字,fun1函数名,x为函数的形参可以有多个,多个之间用“,”隔开;return 函数返回值的关键字,python中return可以是非必要
2 def fun1(x):
3 x += 1
4 return x
1 # 函数返回值可以有多个,之间使用“’”分隔,返回值讲多个值组成的元组进行返回。 当无return时python会隐式return “None”,如果只返回一个值就返回这个值本身
2 def fun2(x, y):
3 return x, y
4 print(fun2(3,4), type(fun2(3,4))) #(3, 4) <class 'tuple'>
5 print(fun1(5), type(fun1(5))) #6 <class 'int'>
6 def fun3(x,y):
7 z = x + y
8 print(fun3(1,2),type(fun3(1,2))) #None <class 'NoneType'>
1 #函数调用形式:函数名(实参)fun3为函数名,1和2为函数实参,实参分别传递给fun3函数定义的形参x和y,两者一一对应。
2 fun3(1,2)
3
4 #函数非固定参数
5 #默认参数:函数定义时直接给形参赋值,此值即作为默认的实参值如果函数调用时实参没有给此传递实参,默认参数的形参需要写在所有参数的最后面
6 def fun4(x, y=2):
7 print(x, y)
8 fun4(3, 4) #3 4
9 fun4(3) #3 2
10
11 #可变参数
12 #*args:可以接收多个实参,args是这多个实参组成的元组,*args需要写在非默认形参之后,默认形参之前
13 def fun5(*args):
14 print("args is :", args)
15 print("*args is :", *args)
16 fun5(1, 2, 3) #args is : (1, 2, 3);*args is : 1 2 3;
17 #相反的,当存在一个元组或者列表,我们想直接取其中的数值而不是列表本身也可以使用*符号,如下示例中fun6需要传入两个参数,而实际传递的为一个列表,可以对此列表取*操作
18 def fun6(x, y):
19 print(x + y)
20 for i in [[1, 2], [3, 4], [5, 6]]: # 3 7 11
21 fun6(*i)
22
23
24 #**kwargs将多个关键字参数转换为字典,kwargs是这多个实参组成的字典,**kwargs需要写在*args之后,默认形参之前
25 def fun7(**kwargs):
26 print("kwargs is :", kwargs) #**kwargs是多个键值对不是数据结构无法打印
27 fun7(name="xx1",age=29) #kwargs is : {'name': 'xx1', 'age': 29}
28 #相反的,当存在一个字典,我们想直接取其中k:v不是字典本身也可以使用**符号,如下示例中fun6需要传入两个参数,而实际传递的为一个列字典,可以对此字典取**操作
29 for i in [{"x":1, "y":2}, {"x":3, "y":4}, {"x":5, "y":6}]:
30 fun6(**i) # 3 7 11