python day15
生成器send方法
#send的工作原理
--1、给当前停止位置的yield传入参数
--2、再去调用__next__()方法找到找下一个yield,返回yield的值并且停住
def fn():
a = yield 1
b = yield 2
yield 3
fn().__next__() #直接去找yield并且返回yield的值
fn().send() #先给当前yield传值(被赋值给了a),再和next方法一样去找下一个yield并且返回yield值
递归
递归:函数直接或者间接调用自己都成为递归
#递归主要分为两个部分
#回溯:去寻找答案的过程,终究有一个出口,如果没有出口就是死循环(终究会撑爆内存,所以限制了最大循环次数)
#递推:通过出口返回的答案,再一层一层返回来,得到最初想要的结果(有一定的规律才能返回递推回来)
所以递推有两个前提:
--1、递归必须要有出口
--2、递归回溯递推的条件一定要有规律
#案例:阶乘 def fac(num): #num的阶乘就是num乘以(num-1)的阶乘 if num == 1: return 1 #出口是 1 的阶乘是 1 return fac(num - 1) * num print(fac(5)) #求的是5的阶乘 结果是120
匿名函数
正常函数结构:
def fn():
#函数体
#return返回值
匿名函数
-1、没有函数名
-2、匿名函数关键字采用lambda
-3、关键字和表示函数功能体 :之间都是参数,所以去除()
-4、匿名函数没有函数体,只有返回值(所以不能写代码块,只能对返回值做些操作),省略了return
lambda 参数:'返回值'
#注意:
1、参数的使用和有名函数一样,六种参数都支持
2、返回值必须明确成为一个值,也可以是一个容器对象
#反例:
a = lambda *args,**kwargs:'返回值1','返回值2'
print(a) ==>得到的是一个(函数地址,返回值2) 他不会把返回值1和返回值2当成一个整体,需要自己加括号表明
max结合匿名函数工作原理
max(iter,key = lambda x : x)
1、max内部会遍历iter,将得到值传给lambda匿名函数
2、依据lambda返回值作为比较条件,得到最大条件下的那个遍历值
3、对外返回最大遍历的值
min()的工作原理和max的工作原理一样,得到比较条件最小的那一个遍历值
常用的内置函数
内置函数连接:https://docs.python.org/zh-cn/3.7/library/functions.html#built-in-functions
map(匿名函数,iterable)
map(lambda x : x*2 , [1,4,3]) #将便利出来的结果传入匿名函数,再根据返回值得到映射的结果
映射结果可以映射成任何类型
reduce
from functools import reduce
a = reduce(lambda x,y : x*y,[3,5,2,4])
1、先传两个值3、5进去得到的返回值是15
2、再把15和之后遍历的2一起传进去得到的返回值是30
3、再把30和之后遍历的4一起传进去得到的返回值是120
#所以a最终的值是120
sorted(iter,fn,reverse)
dic = {'owen':(19,39900),'kevin':(23,4543)}
res = sorted(dic,key = lambda x :dic[x][1]) # ['kevin','owen'] 遍历的是key 排序的条件是把key传到
匿名函数中的到的返回值 reverse默认值是Fause
res = sorted(dic,key = lambda x :dic[x][1],reverse = True) #['owen','kevin'] #当reverse改为True的时候
得到列表就反转
------
1、与类型相关的
int()、float()、str()、bool()、list()、dict()、set()、tuple().......
ord()字符串转换成ascii码的十进制、chr()ascii的十进制转换成字符
2、进制转换
print(bin(10)) 1010 十进制转换成二进制
print(oct(10)) 12 十进制转换成八进制
print(hex(10)) a 十进制转换成十六进制
print(0b111) 7
print(0o11) 9 转回来
print(0x11) 17
3、常用的操作类型
range()、len()、iter()、next()、enumerate()、id()、type()、print()、input()、open()
4、原义字符串
print(r'a\nb') #可以让\n转义符不转义
5、数学运算相关
abs()取绝对值、sum()求和、max()求最大值、min()求最小值、pow()里面两个参数是幂,三个参数的话前两个是幂第三个对他们取余、sorted()排序
print(pow(3,2)) 3**2 9
print(pow(3,2,4)) 3**2%4 1