![]()
# def gen():
# print("我是一个函数")
# return "娃哈哈" # 返回 娃哈哈, 返回给调用者
# print("你好")
# print("你好")
# print("你好")
#
# ret = gen()
# print(ret) # 娃哈哈
# 生成器函数. 就是把return换成yield
# def gen():
# print("爽歪歪")
# yield "娃哈哈" # 可以让我们的函数分段运行
# print("酸酸乳")
# yield "AD钙奶"
# print("黄焖鸡米饭")
#
# ret = gen() # 不会执行你的函数, 获取到生成器对象
# # 迭代器不能等价代换
# print(ret) # <generator object gen at 0x00000195518CFE60> generator 生成器
# print(ret.__next__()) # 必须执行__next__()才可以触发生成器的运行 娃哈哈
# print(ret.__next__()) # 必须执行__next__()才可以触发生成器的运行 AD钙奶
# print(ret.__next__()) # StopIteration 迭代器, 就找yield, 执行不到才会报错
# 生成器函数有什么用
# 普通的程序会占用内存
# def buy():
# lst = []
# for i in range(10000):
# lst.append("衣服%s" % i)
# return lst
#
# lst = buy()
# print(lst)
# def gen():
# lst = []
# for i in range(1, 10000):
# lst.append("衣服%s" % i)
# if i % 50 == 0: # 1 2 3 4 5 6 7 8 9 .. 49 50
# yield lst
# lst = [] # 每次生成一个新列表
#
# g = gen() # 获取到生成器
#
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# 迭代器
# # 节省内存
# # 惰性机制
# # 只能往前
# 生成器还可以使用__next__(), send()来访问生成器
# send()可以给上一个yield位置传值
# def func():
# print("水饺")
# a = yield "大馅水饺"
# print("a=", a)
# print("烧饼")
# b = yield "武大郎烧饼"
# print("b=",b)
# print("老婆饼")
# c = yield "只要老婆不要饼"
# print("c=", c)
#
#
# gen = func() # 生成器
# print("返回值是:", gen.__next__())
# print("返回值是:",gen.send("混沌面")) # 和__next__()一样也是向下找yield. 给上一个yield传值
# print("返回值是:",gen.send("胡辣汤")) # 和__next__()一样也是向下找yield. 给上一个yield传值
# print("返回值是:",gen.send("马拉")) # 和__next__()一样也是向下找yield. 给上一个yield传值
# send()不可以在第一个位置和最后一个位置出现
# 最后的yield后的代码是可以执行的但是会报错. StopIteration
# 生成器函数里不要写return
# def func():
# print("哈哈")
# yield "呵呵"
# print("吼吼")
# return "嘻嘻" # don't do this!
#
# gen = func()
# gen.__next__()
# gen.__next__()
# def gen():
# lst = ["⿇花藤", "胡辣汤", "微星牌饼铛", "Mac牌锅铲"]
# yield from lst # 把列表中的每一个元素返回
# # yield lst[0]
# # yield lst[1]
# # yield lst[2]
# # yield lst[3]
#
# g = gen() # 生成器函数 -> 获取生成器
# for el in g:
# print(el)
# def gen():
# lst = ["⿇花藤", "胡辣汤", "微星牌饼铛", "Mac牌锅铲"]
# lst2 = ["饼铛还是微星的好", "联想不能煮鸡蛋", "微星就可以", "还可以烙饼"]
# yield from lst
# # yield lst[0]
# # yield lst[1]
# # yield lst[2]
# # yield lst[3]
# yield from lst2
# # yield lst2[0]
# # yield lst2[1]
# # yield lst2[2]
# # yield lst2[3]
#
# g = gen() # 获取生成器
# for el in g: # 从生成器获取数据
# print(el) # 打印
def func():
print(111)
yield 222
g = func()
print(g.__next__())
g = func()
print(g.__next__())
gg = (i for i in range(10))
print(list(gg))
# lst = []
# for i in range(1, 18):
# lst.append("python全栈%s期" % i)
#
# print(lst)
# 列表推导式 快速的简单的创建一个列表
# lst = ["python全栈%s期" % i for i in range(1, 17)]
# 语法: [结果 for循环 if判断]
# lst = [ i for i in range(1, 21) if i % 2 == 1]
# print(lst)
# lst = ["中岛美雪", "夏川美里", "原由子", "汪峰", "田震","那英","周杰伦"]
#
# # for el in lst:
# # if len(el) == 2:
# # pass
# new_lst = [ el for el in lst if len(el) == 2]
# print(new_lst)
# 生成列表: 1-20 所有的奇数的2次方
# print([ i*i for i in range(1,21) if i % 2 == 1])
# [3,6,9] 已知
# [(1,2,3), (4,5,6), (7,8,9)]
# lst = [3,6,9]
# new_lst = [(el-2, el-1, el) for el in lst]
# for el in lst: # 3
# new_lst.append((el-2, el-1, el))
# print(new_lst)
# 寻找名字中带有两个e的⼈的名字 name.count("e") == 2
# names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'],
# ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
#
# lst = [name for el in names for name in el if name.count("e") == 2]
# print(lst)
# 语法: [结果 for循环 if判断]
# 字典推导式和集合推导式
# {结果 for循环 if判断}
# {结果 for循环 if判断}
# lst = [11, 22, 33] # => {0:11, 1:22, 2:33}
# dic = {i:lst[i] for i in range(len(lst)) }
# print(dic)
#
# dic = {"张无忌":"赵敏", "杨过":"小龙女", "郭靖":"黄蓉"}
# # 把字典中的key和value互换
# # dic = {"赵敏":"张无忌", "小龙女":"杨过", "黄蓉":"郭靖"}
# dic1 = { v:k for k, v in dic.items()} # 强化
# print(dic1)
#
# dic2 = { dic[k]:k for k in dic} # 强化
# print(dic2)
# 集合推导式 # 不可变. 不重复, 无序
# {结果 for循环 if判断}
# s = {i*"胡辣汤" for i in range(10)}
# print(s)
# 没有元组推导式
# 生成器表达式 (结果 for循环 if判断) => 生成器表达式
# 特点: 本质是迭代器. __next__()
# 1. 省内存
# 2. 惰性机制
# 3. 只能向前
# def gen():
# yield 1
#
# r = gen()
# r....
# g = (i for i in range(10))
# print(g) # <generator object <genexpr> at 0x000001F32B74FEB8>
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__()) # StopIteration
# lst = ["衣服%s" % i for i in range(100000000)] # 占内存
# print(lst)
# g = ("衣服%s" % i for i in range(100000000)) # 生成器表达式. 节省内存
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# g = (i for i in range(10))
# # s = {1,2 , 3, 4, 5}
# print(list(g)) # 把传递进来的数据转化成列表. 里面包含了for循环
# # list() => for=> __iter__() ==> __next__()
#
# print(list(g)) # 上一次已经拿没了
# print(g.__next__())
# for el in g:
# print(el)
# for el in g: # 已经没有数据了 惰性机制-> 只能往前
# print(el)
# def func(): # 生成器函数
# print(111)
# yield 222
#
# g = func() # 生成器 -> 没有执行过__next__()
# g1 = (i for i in g) # 生成器表达式. 也没有__Next__()
# g2 = (i for i in g1) # 生成器表达式. 也没有__Next__()
# # 到此为止, 没有人拿过值
#
# print(list(g2)) # 111 [222]
# print(list(g)) # []
# print(list(g1)) # []
# 111
# [222]
# []
# []