day6
今天厉害一点
递归,内置函数,匿名函数,高阶函数
今天晚上主要学电赛了,这里少一点
"""
递归:作用(简化代码遍历一个文件夹下所有文件)特点(函数内部自己调用自己,必须有出口)
"""
def return_num():
return 100
result = return_num()
print(result)
def sum_numbers(num): # 等差数列求和
if num == 1:
return 1 # 出口;return返回到上一次函数调用的位置——实现减一后的数据与原数据累加
return num + sum_numbers(num - 1) # 函数内部自己调用自己
sum_result = sum_numbers(10) # 3以内累加和=3+2以内累加和(再调用=2+1以内累加和)
print(sum_result) # 我计算机的最大递归深度996,没有出口会超出
'''lambda(匿名函数)简化代码:当函数有一个返回值,并且只有一句代码
参数可有可无,能接收任何数量的参数但只能返回一个表达式的值
'''
def gulaobanfa():
return 100
result = gulaobanfa()
print(result)
xinbanfa = lambda: 100
print(xinbanfa) # 打印lambda内存地址
print(xinbanfa()) # 这样打印100
fn1 = lambda a, b: a + b # 实现a+b
print(fn1(1, 2))
fn2 = lambda a, b, c=100: a + b + c
print(fn2(1, 2))
fn3 = lambda *args: args
print(fn3(12, 21, 11)) # 返回值为元组
fn4 = lambda **kwargs: kwargs
print(fn4(name='aa', age=22)) # 返回值为字典
fn5 = lambda a, b: a if a > b else b # 带判断:ab比大小,谁大返回谁
print(fn5(11, 22))
# 列表数据按k值排序
students = [{'name': 'aa', 'age': 1}, {'name': 'dd', 'age': 4}, {'name': 'bb', 'age': 2}, {'name': 'cc', 'age': 3}]
students.sort(key=lambda x: x['name']) # x存放将来要排序的数据
print(students)
students.sort(key=lambda x: x['age'], reverse=True)
print(students)
'''高阶函数:把函数作为参数传入'''
abs(-10) # 求绝对值
round(1.2) # 四舍舍五入
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result)
def sum_numm(a, b, f): # 高阶函数
return f(a) + f(b)
result = sum_numm(-1, 2, round) # 还可以传入函数
print(result)
'''内置高阶函数'''
# map(函数名字,列表) 把选用函数作用在列表所有元素上
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2 # 计算二次方
result = map(func, list1) # 返回一个迭代器,所以需要list()一下
print(result) # 打印迭代器
print(list(result)) # 转换成数据列表后,才能看到数据
# reduce(func, lst),func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累计计算
import functools # 倒模块
list2 = [1, 2, 3, 4, 5]
def func(a, b):
return a+b
result = functools.reduce(func, list2) # reduce在functools这个模块当中
print(result)
# filter(func,lst) 过滤序列,
list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def func(x):
return x % 2 ==0
result = filter(func, list3)
print(list(result))