欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 函数递归-三元表达式-列表生成式-字典生成式-匿名函数-内置函数 8.2笔记

程序员文章站 2022-07-09 12:47:40
上节课复习: 1. 无参装饰器 def 装饰器名字(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) return res return wrapper @装饰器名字 #被装饰的函数名字=装饰器名字(被装饰的函数的内存地址) ......
上节课复习:
1. 无参装饰器
def 装饰器名字(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
return wrapper

@装饰器名字 #被装饰的函数名字=装饰器名字(被装饰的函数的内存地址)
def 被装饰的函数名字():
pass

2, 有参装饰器
def 装饰器名字(参数1,参数2,...):
def outter(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
return wrapper
return outter

@装饰器名字(值1,值2,....) #@outter
def 被装饰的函数名字():
pass

3.叠加多个装饰器
@deco1
@deco2
@deco3
def index():
pass

解释语法的顺序:自下而上,deco->deco2->deco1
调用index()时才开始触发装饰器内部闭包函数的执行,闭包函数执行顺序是:自上而下, deco1.wrapper1->deco2.wrapper2->deco3.wrapper3



今日内容:

1.函数递归(*****)
1.什么是函数递归
函数的递归调用是函数嵌套调用的一种特殊形式,\
在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用
递归调用必须有两个明确的阶段:
1.回溯: 一次次递归调用下去,说白了就一个重复的过程,\
但需要注意的是每一次递归调用问题的规模都应该有所减少,\
直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件
2.递归: 往回一层一层推算出结果
递归调用就是一个重复的过程,但是每一次重复问题的规模都应该有所减少,并且应该在满足某种条件的情况下结束重复,开始进入递增

2.三元表达式,列表生成式,字典生成式
1.三元表达式:
三元表达式实现的效果就是: 条件成立的情况下返回一个值,不成立的情况下返回另一种值
# 条件成立情况下返回的值 if条件 else 条件不成立情况下返回的值
def max2(x,y):
# if x > y:
# return x
# else:
# return y
return x if x > y else y #三元表达式一行代码把上面代码全省略了

2.列表生成式:
names = ['alex', 'lqz', 'yyh', 'fm']
l = [name + '_DSB' for name in names]

3.字典生成式:
补充内置方法: enumerate(),取索引
keys = ['name', 'age', 'sex']
vals = ['egon', 18, 'male']

# dic = {}
# for i,k in enumerate(keys):
# dic[k] = vals[i]
# print(dic)

dic = {k:vals[i] for i,k in enumerate(keys)}
dic = {k:vals[i] for i,k in enumerate(keys) if i > 0}


3.匿名函数与内置函数
1.匿名函数: 就是没有名字的函数
1.为何要用匿名函数:
用于仅仅临时使用一次的场景,没有重复使用的需求
print(lambda x,y:x+y)(1,2))
print((lambda x,y: x if x > y else y)(8,2))
2.匿名函数和内置函数配合使用
salaries = {
'egon':300000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
求薪资最高的那个人名:即比较的是value,但取结果是key
res = max(salaries)
print(res)
可以通过max函数的key参数来改变max函数的比较依据,运行原理:
max函数会'for循环'出一个值,然后将该值传给key指定的函数
调用key指定的函数,将拿到的返回值当作比较依据

max(): 比较的是最大值
max(salaries,key=lambda name:salaries[name])

min(): 比较的是最小值
min(salaries,key=lambda name:salaries[name])

sorted(): 排序
nums = [11, 33, 22, 9, 31]
res = sorted(nums,reversed(True))
print(res)

map(): 把一个列表按照我们自定义的映射规则映射成一个新的列表
map(lambda name:name+'DSB',names)

filter(): 从一个列表中过滤出符合我们过滤规则的值
相当于for循环取出每一个人名,然后传给匿名函数,将调用匿名函数返回值为True的那个人名给留下来
filter(lambda name:name.endswith('sb'),names)

reduce: 把多个值合并成一个结果
from functools import reduce
1 = [a, b, c, d]
reduce(lambda x,y:x+y,l)
reduce(lambda x,y:x+y,range(1,101))