一、函数
代码重复使用,代码可读性差,所以要使用函数。
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
二、函数的定义与调用
1 def my_len(): #def 关键字,定义函数, 空格 函数名(变量) 2 l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] 3 count = 0 4 for i in l1: 5 count += 1 6 7 my_len() # 函数名 + () 执行此函数 8 9 #函数是以功能为导向,函数内部尽量不要有print
三、函数的返回值
3.1 遇到return 此函数结束,不在向下进行
1 def my_len(): 2 l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] 3 print(1111) 4 print(222) 5 return 6 print(333)
3.2 return返回值
3.2.1 不写return,返回None
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def my_len(): 2 l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] 3 count = 0 4 for i in l1: 5 count += 1 6 print(my_len())
3.2.2 return None ,返回None
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def my_len(): 2 l1 = [1,2,3,4,5,6,7] 3 count = 0 4 for i in l1: 5 count += 1 6 return None 7 print(my_len())
3.2.3 return 单个值 返回此单个值
def my_len(): l1 = [1,2,3,4] count = 0 for i in l1: count += 1 return 'alex' print(my_len())
3.2.4 return 多个值 将多个值包在元组中,返回给调用者此元组
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def my_len(): 2 l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] 3 count = 0 4 for i in l1: 5 count += 1 6 return 1,2,[123,2] 7 ret = my_len() 8 print(ret) 9 def my_len(): 10 l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] 11 count = 0 12 for i in l1: 13 count += 1 14 return 1,2,[123,2] 15 ret1,ret2,ret3 = my_len() 16 print(ret1,ret2,ret3)
四、函数的参数
4.1 函数的传参
1 l2 = [1, 2, 3, 4, 5, 6, 5, 4, 3, 3, 'alex'] 2 #函数的传参 3 def my_len(x): #形参:形式参数 4 count = 0 5 for i in x: 6 count += 1 7 return count 8 ret = my_len(l2) # 实参:实际参数 9 print(ret) 10 len(s)
4.2 实参传参
4.2.1 按位置传参
1 def my_len(x,y,z): #形参:形式参数 2 count = 0 3 for i in x: 4 count += 1 5 return count 6 ret = my_len(l2,s,'alex') # 按位置传参 7 print(ret)
4.2.2 按关键字传参
1 def func(x,y): 2 z = x if x > y else y 3 return z 4 func(y = 2,x = 3) #关键字传参
4.2.3 混合传参 关键字参数永远在位置参数后面
1 def func(x,y,a,b): 2 print(x,y) 3 print(a,b) 4 func(1,2,b = 34,a = 3) # 混合传参
4.3 形式传参
4.3.1 位置参数
def my_len(x,y): #形参:形式参数 count = 0 for i in x: count += 1 return count ret = my_len(2,3) # 按位置传参 print(ret)
4.3.2 默认参数
def func(name,sex='男'): with open('name_list','a',encoding='utf-8') as f1: f1.write('{} {} '.format(name,sex)) while True: name = input('请输入名字:') if '姐' in name: sex = input('请输入性别:') func(name,sex) # 混合 else: func(name)
陷阱:
1 #[] {} () 2 def func(name,l = []): 3 l.append(name) 4 return l 5 print(func('alex')) 6 print(func('wusir'))
4.3.3 动态参数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # *args 动态参数,不定长参数 2 #args元组,包括了所有的位置参数 3 #**kwargs,包括了关键动态参数 4 #顺序:位置参数==>*args==>默认参数==>**kwargs 5 def func(a,b,c,*args,sex = '男',**kwargs): 6 print(a) 7 print(b) 8 print(c) 9 print(args,type(args)) 10 print(sex) 11 print(kwargs) 12 func(1,2,'alex','wusir','ritian ',sex = '女',name = 'taibai',age = 21) 13 ############ 14 def func2(*args,**kwargs): 15 #万能参数 16 print(args) 17 print(kwargs) 18 func2(1,2,3,5,name='alex',age=56) 19 ############ 20 def my_sum(*args): 21 count = 0 22 for i in args: 23 count += i 24 return count 25 print(my_sum(1,2,3,6,78)) 26 print(sum([1,2,3])) 27 #魔法运算:打散 28 def func2(*args,**kwargs): 29 print(args) 30 l1 = [1,2,3,] 31 l2 = [1,2,3,2,3,100,2] 32 func2(*l2,*l1) 33 ######## 34 def func3(*args,**kwargs): 35 print(args) 36 print(kwargs) 37 dic = {'name':'alex','age':12} 38 dic2 = {'name':'jin','age':22} 39 func3(**{'name1':'alex','age1':12},**{'name2':'jin','age2':22},name3 = 'wusir')