Python9- 生成器函数进阶-day14

生成器进阶#send的获取下一个值的效果和next基本一致,
#只不过在获取下一个值的时候,给上一个值的位置穿第一个数据
使用send的注册事项:
#第一次使用生成器的时候,必须用next获取下一个值
  #最后一个yield不能接受外部的值
def generator():
    print(123)
    content = yield 1
    print('======',content)
    print(456)
    yield 2

g = generator()
ret = g.__next__()
print('***',ret)
ret = g.send('hello')  #send的效果和next一样
print('@@@',ret)

123
*** 1
====== hello
456
@@@ 2

 生成器进阶实例

def average():
    sum = 0
    count = 0
    avg = 0
    while True:
        num = yield avg  #10
        sum +=num     #10
        count +=1     #1
        avg = sum/count

avg_g = average()
avg_g.__next__()
avg1 = avg_g.send(10)
print(avg1)
avg2 = avg_g.send(20)
print(avg2)

#yield from 从一个容器取出并且一个一个接收到

def generator():
    a = 'abcde'
    b = '12345'
    yield from a    #===for i in a: yield i
    yield from b    #===for i in b: yield i
g = generator()
for i in g:
    print(i)


a
b
c
d
e
1
2
3
4
5
# send
# send的作用范围和next一模一样
# 第一次不能用send
# 函数中的最后一个yield不能接受新的值
# 计算移动平均值的例子
# 预激生成器的装饰器的例子
# yield from

#生成器表达式和列表推导式
egg_list=['鸡蛋%s'%i for i in range(10)]  #列表推导式
print(egg_list)
print([i*2 for i in range(10)])
#生成器表达式
g = (i for i in range(10))
print(g)
for i in g:
    print(i)
#括号不一样
#返回值不一样=====几乎不占用内存

各种推导式

# [每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型]
# [满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件]

#30以内所有能被3整除的数
ret = [i for i in range(30) if i%3==0]
print(ret)
#30以内所有能被3整除的数的平方
ret = [i*i  for i in range(30) if i%3==0]
print(ret)
#找到嵌套列表中名字含有2个e的所有名字
names = [['tim','tom','cc','andreeew'],['alice','eeenn']]
ret = [name for lst in names for name in lst  if name.count('e')>=2]
print(ret)
#字典推导式
# mcase = {'a':10,'b':34}
# # 将一个字典的key和value对调

# mcase = {'a':10,'b':34}
# mcase_frequency = {mcase[k]:k for k in mcase}

# print(mcase_frequency)

# 合并大小写对应的value,将k统一成小写
# mcase = {'a':10,'b':34,'A':7,'Z':3}
# mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys()}
# print(mcase_frequency)

#集合推导式
#例:计算列表中每个值的平方,自带去重功能
squared = {x**2 for x in [1, -1, 2]}
print(squared)
# Output: set([1, 4])


原文地址:https://www.cnblogs.com/zhangtengccie/p/10328104.html