---恢复内容开始---

1.生成器和生成器函数

2.列表推导式

一生成器

什么是生成器。生成器实质就是迭代器。

python中有三种方式来获取生成器。

1通过生成器函数

2通过各种推导式来实现生成器

3通过数据的转换也可以获取生成器

将函数中的return换成yield就是生成器

运行的结果和上面啊不一样,为什么呢,由于函数中存在yield。那么这个函数就是一个生成器函数。这个时候。我们在执行这个函数的时候,就不再是函数的执行了。而是获取这个生成器,如何使用?想想迭代器。生成器的本质就是迭代器。所以。我们可以直接执行__next__()来执行

那么我们可以看到,yield和return的效果一样,区别就是yield是分段来执行1个函数。return 呢?直接停止执行函数。

当程序运行完最后一个yield。那么后面继续走 --next--()程序会报错

def  c():

  lst=[]

  for i in range(0,10000):

    lst.appende("衣服"+str(i))

  return lst

cl=c()

这样就是一下子全部打印出来,太站内存

def  c():

  for i in range(0,10000):

    yield "衣服“+str(i)

cl=c()

print(c.__next__())

print(c.__next__())print(c.__next__())      这样就是你打印一次出一个,不会占用内存

一次出一个,生成器一个一个的指向下一个,不会回去__next__()到哪指针就到哪下一次继续获取指针指向的值

然后是 send方法send和__next__()一样都可以让生成器执行到下一个yield。

send和next的区别

都是往下走一次

send可以给上一个yeild的位置传递值,不能给最后一个yield发送值,在第一次执行生成器代码的时候不能使用send()

 生成器可以使用for循环来循环内部元素

def func():
    print(111)
    yield 222
    print(333)
    yield 444
    print(555)
    yield 666
gen = func()
for i in gen:

print(i)

结果: 111 222 333 444 555 666

二,列表推导式,生成器表达式以及其他推导式

列表推导式是通过一行行来构建你要的列表,列表推导式看起来代码简单。但是出现错误之后很难排查。

列表推导式的常用用法:

【结果 for 变量 in可迭代对象】
还可以进行筛选

筛选模式:
[ 结果 for 变量 in 可迭代对象 if 条件 ]

生成器表达式和列表推导式基本一样 就是()换成【】但是更重要的是 生成器打印出的是地址,列表推导式表达的是人能看懂的字符

打印结果就是一个生成器,我们可以使用for来循环这个生成器

gen = ("麻花藤我第%s次爱你" % i for i in range(10))for i in gen:

print(i)

生成器表达方式也可以筛选   整除2是否为0count  XX出现几次  出现几次怎样 没有怎样

生成器表达式,和列表推导式

1,列表推导式比较耗内存,一次性加载,生成器表达式几乎不占用内存使用的时候才分配和使用内存

2.得到的值不一样。列表推导式得到的是一个列表,生成器表达式获取的是一个生成器

生成器的惰性机制生成器只有在访问的时候才取值,说白了,你找他要他才给你值,不找他他就不执行。

深坑--生成器,要值得时候才拿值

字典推导式:

# 把字典中的key和value互换
dic = {'a': 1, 'b': '2'}
new_dic = {dic[key]: key for key in dic}

print(new_dic)

# 在以下list中. 从lst1中获取的数据和lst2中相对应的位置的数据组成⼀一个新字典

lst1 = ['jay', 'jj', 'sylar']
lst2 = ['周杰伦', '林林俊杰', '邱彦涛']
dic = {lst1[i]: lst2[i] for i in range(len(lst1))}

print(dic)

 

 

 

 

 

集合推导式:
集合推导式可以帮我们直接⽣成一个集合. 集合的特点: ⽆序, 不重复. 所以集合推导式⾃带去重功能

 

推导式有,列表推导式有,字典推导式,集合推导式,没有元组推导式

生成器表达式(结果 for 变量 in 可迭代对象 if条件筛选)

生成器表达式可以直接获取到生成器对象。生成器对象可以直接进行for循环,生成器具有惰性机制。