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