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

posted @ 2019-04-30 16:49  hesujian  阅读(163)  评论(0编辑  收藏  举报