递归函数
递归是一种编程思想
如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现
递归的特点
函数内部自己调用自己
必须有出口
def sum_numbers(num):
#如果是1,直接返回1 -- 出口
if num == 1:
return 1
#如果不是1,重复执行累加并返回结果
return num + sum_numbers(num-1)
sum_result = sum_numbers(3)
#输出结果为6
print(sum_result)
注意:如果没有出口,会报错造成超出最大递归深度
匿名函数
lambda表达式
lambda 参数列表:表达式
注意:
lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用
lambda表达式能接收任何数量的参数但只能返回一个表达式的值
lambda的应用场景
如果一个函数有一个返回值并且只有一句代码,可以使用lambda简化。
def add(a,b):
return a + b
result = add(1,2)
print(result)
#fn1 lambda a,b:a + b
#print(fn1(1,2))
lambda的参数形式
无参数
fn1 = lambda:100
print(fn1())
一个参数
fn1 = lambda a:a
print(fn1('hello world'))
默认参数
fn1 = lambda a,b,c=100: a + b + c
print(fn1(10,20))
可变参数:*args
fn1 = lambda *args:args
print(fn1(10,20,30))
注意:返回值为元组
可变参数:**kwargs
fn1 = lambda **kwargs:kwargs
print(fn1(name = 'python',age=20))
列表数据按字典key的值排序
students = [
{'name':'Tom','age':21},
{'name':'Rose','age':22},
{'name':'Jack','age':20}
]
#按name值升序排列
students.sort(lambda x:x['name'])
#按name值降序排列
students.sort(lambda x:x['name'],reverse = True)
print('students')
高阶函数
abs()
可以完成对数字求绝对值计算
round()
可以完成对数字的四舍五入计算
def sum_num(a,b,f):
return f(a) + f(b)
result = sum_num(-1,2,abs)
print(result)
map()
map(func,lst),将传入的函数变量func作用到st变量的每个元素中,并将结果组成新的列表(pyhton2)/(python3)返回
list = [1,2,3,4,5]
def func(x):
return x ** 2
result = map(func,list)
print(list(result))
reduce()
reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下个元素做累计计算。
注意:reduce()传入的参数func必须接收2个参数
import functools
list = [1,2,3,4,5]
def func(a,b):
return a + b
result = functools.reduce(func,list)
print(result) #15
filter()
filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,可以使用list()来转换
list = [1,2,3,4,5]
def func(x):
return x % 2 == 0
result = filter(func,list)
print(list(result)) #[2,4]