一、函数
作用: 封装一段功能
函数定义关键字: def
1. 不定长参数
概述: 传入参数个数不固定
(1) 不确定参数名,以元组形式去接收
如: def print(self, *args, sep=’ ‘, end=’\n’, file=None)
def func(*args): print(args) func(1,2,3,4,5,6,7,8,9,10) 输出结果: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
def func(a,b,*args): print(a) print(b) print(args) print("*"*50) multi = a * b for i in args: multi *= i return multi result = func(1,2,4,5,6) print(result) 结果: 1 2 (4, 5, 6) ************************************************** 240
2. 关键字参数
概述:不确定参数接收,必须是【关键字+值】, 形态是字典
# 关键字参数定义 def func(**kwargs): # 打印关键字参数 print(kwargs) # 循环遍历每一个关键字参数 for key in kwargs: print(key,kwargs[key]) func(x=1,y=2,z=3)
3. *和**一起作为形参
#*args和**kwargs在一起的时候,*args 排在 **kwargs前边 def func(*args,**kwargs): print(args,kwargs) func(1,2,3,4,5,username="lm",pwd="888888")
4. 实参为*args的情况
def func(a,b,c,d): print(a,b,c,d) l = [1,2,3,4] func(*l)
5. 实参为**kwargs的情况
def func(**dict): print(dict) d = {"um":"modeng","pwd":"$12_12$"} func(**d)
二、参数分为可变类型和不可变类型
不可以变类型: 整型,字符串,元组;不会影响参数本身
def cInt(a): a = 10 # b是一个整型 b = 2 cInt(b) print(b)
可变数据类型: 列表,字典,集合;会影响到参数本身
def changeList(l): l.append([1,2,3,4,5]) print("函数内的列表:",l) l = [15,25,35] changeList(l) print("函数外的列表:",l)
三、匿名函数
关键字: lambda
注 意:
1. lambda 只是一个表达式,函数体比def简单的多
2. 封装的逻辑有
实例
1. 普通定义 add = lambda a,b:a+b print(add(6,10)) 2. 直接调用 (lambda a,b:a+b)(10,10) 3. 带有默认值参数 a = lambda a=20,b=30:a+b 4. 没有参数 a = 2 b = 3 c = lambda:a+b #小小注意,参数名不能和函数名重叠
四、递归函数
注意: 自己调用自己,注意调用自己深度,过多,计算机资源承载不了 满足终止条件 def fact(n): if n == 1: return 1 return n*fact(n-1) print(fact(3))