生成器

相信时间的力量 一切都是最好的安排! (2/2)
--------------------------------------------------------------------------------

# /*<--生成器函数 就是把return 换成 yeild -->*/

#
# def bbq():
# print("烤茄子")
# yield "烤生蚝"
# print("烤面筋")
# yield "烤韭菜"
# print("烤秋刀鱼")
#
#
# ret = bbq() #不会执行你的函数,获取生成器对象
# print(ret) #<generator object bbq at 0x00A7CC30> generator 生成器 返回一个疑似地址的东西
# print(ret.__next__()) #必须执行__next__()才可以触发生成器对象的运行 "考生蚝"
# print(ret.__next__()) #必须执行__next__()才可以触发生成器对象的运行 "烤韭菜"
# print(ret.__next__()) #StopIteration 迭代器,就找yield 执行不到就报错

# --------------*******--------------

# def shop():
# lst = []
# for i in range(1,999):
# lst.append("foods%s" % i)
# return lst
# q = shop()
# print(q)
## --------------*******--------------

# def shop1():
# for j in range(1,1999):
# yield "foods%s" % j
#
# q1 =shop1() #获取生成器
#
# print(q1.__next__())
# print(q1.__next__())
# print(q1.__next__())
# print(q1.__next__())
# print(q1.__next__())
## --------------*******--------------

# def gen():
# i = 1
# while i < 51:
# yield "衣服%s" % i
# i = i + 1
# --------------*******--------------

# 列表推导式

# lst = ["奥特曼打小%s个小怪兽" % i for i in range(1,6)]
# # 语法: [结果 for循环 if判断]
# print(lst)

# lis = ["中岛美雪", "夏川美里", "原由子", "汪峰", "田震","那英","周杰伦"]
# lis1 = []
# for i in range(len(lis)):
# if len(lis[i])== 2:
# lis1.append(lis[i])
# print(lis1)
# --------------*******--------------

# lis = [lis(i) for i in range(len(lis)) if len(lis(i))==2]
# print(lis)

# liss = []
#
# for i in range(1,21,2):
# x = i**2
# liss.append(x)
# print(liss)
#
# liss = [i*i for i in range(1,21,2)]
# --------------*******--------------

# l = [3,6,9]
# [(1,2,3),(4,5,6),(7,8,9)]

# liss1 = []
# for i in l:
# x=i-1
# y=i-2
# z = i
# liss1.append((y,x,z))
# print(liss1)

# liss1 = [(i-2,i-1,i) for i in l]
# print(liss1)
# --------------*******--------------

# names = [
# ['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'],
# ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']
# ]
# lst = [e for i in names for e in i if e.count("e") == 2]
# print(lst)

# lis = {"张无忌":"赵敏", "杨过":"小龙女", "郭靖":"黄蓉"}
# dic = {lis[key]:key for key in lis}
# print(dic)

# dic = {dic[i]:i for i in range(len(dic))}
# --------------*******--------------
# # 生成器的惰性机制
# def func():
# print(111)
# yield 222
# g = func()
# g1 = (i for i in g)
# g2 = (i for i in g1)
# print(list(g2))
# print(list(g))
# print(list(g1))
# --------------*******--------------
'''
day12作业默写
1,整理今天的博客,写课上代码,整理流程图。
今日主要内容(重要)
迭代器
__iter__() 获取迭代器
__next__() 下一个

生成器
本质就是迭代器
两种方式写生成器
1. 生成器函数
2. 生成器表达式

生成器函数
函数内部有yield. yield返回 -> return
yield可以把函数分段执行
生成器函数被调用的时候. 返回生成器
def func():
yield
g = func() - 得到生成器

生成器的用法和迭代器基本一致
__next__() 开始执行生成器 . 执行到yield. 直到没有yield. 抛出StopIteration

send() 可以给上一个yield传值

1. 省内存
2. 惰性机制, 不访问__next__() 就没有值.
3. 只能向前. 不能反复.


各种推导式(简单)
列表推导式 [结果 for循环 if判断]
字典推导式 {key: value for循环 if判断}
集合推导式 {key for循环 if判断}

生成器表达式(最难)
(结果 for循环 if判断)
惰性机制, 不访问__next__() 就没有值.
只能向前. 不能反复.

预习:
内置函数一 整理
'''
# ---------------------------------------------------------------------------------#
# # 2,用列表推导式做下列小题

# (1)过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
# lsi = ["ajax", "mysql", "java", "php""js", "css", "html","ps","c#"]
# lsi1 = [i.upper() for i in lsi if len(i) >3]
# print(lsi1)

# # ---------------------------------------------------------------------------------#
# (2)求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表
# nist = [(x,y) for x in range(0,6,2) for y in range(1,6,2)]
# print(nist)

# # ---------------------------------------------------------------------------------#
# (3)求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]
# M = [3,6,9]
# nst = [[i-2,i-1,i] for i in M]
# print(nst)

# # ---------------------------------------------------------------------------------#
# (4)求出50以内能被3整除的数的平方,并放入到一个列表中。
# nit = [i**2 for i in range(0,51,3)]
# print(nit)
# # ---------------------------------------------------------------------------------#
# (5)构建一个列表:['python1期', 'python2期', 'python3期', 'python4期', 'python6期', 'python7期', 'python8期', 'python9期', 'python10期']
# lt = ["python%s期" % i for i in range(1,11)]
# print(lt)
# # ---------------------------------------------------------------------------------#
# (6)构建一个列表:[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
# nt = [(i,i+1) for i in range(0,6)]
# print(nt)
# # ---------------------------------------------------------------------------------#
# (7)构建一个列表:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# nst = [i for i in range(0,19,2)]
# print(nst)
# # ---------------------------------------------------------------------------------#
# (8)有一个列表l1 = ['alex', 'WuSir', '老男孩', '太白']将其构造成这种列表['alex0', 'WuSir1', '老男孩2', '太白3']
# l1 = ['alex', 'WuSir', '老男孩', '太白']
# l2 = [l1[i]+str(i) for i in range(len(l1))]
# print(l2)
# # ---------------------------------------------------------------------------------#
# (9)有以下数据类型:
# x = {
# 'name':'alex',
# 'val':[
# {'tp':1517991992.94,'va':100,},
# {'tp': 1517992000.94,'va': 200,},
# {'tp': 1517992014.94,'va': 300,},
# {'tp': 1517992744.94,'va': 350},
# {'tp': 1517992800.94,'va': 280}],}

# 将上面的数据通过列表推导式转换成下面的类型:
# [[1517991992.94, 100], [1517992000.94, 200], [1517992014.94, 300], [1517992744.94, 350], [1517992800.94, 280]]
#
# for i in x["val"]:
# print([i["tp"],i["va"]],end="")

# nst =[[i["tp"],i["va"]] for i in x["val"] ]
# print(nst)



# dik = {[i["tp"],i["va"]] for i in x["val"]}
# print(dik)
#
原文地址:https://www.cnblogs.com/dealdwong2018/p/9891341.html