#只要有yield关键字的的函数都是生成器函数 #yield不能和return共用且需要写在函数内 def generator(): print(1) yield 'a' #生成器函数: 执行之后会得到一个生成器作为返回值。 ret = generator() print(ret) print(ret.__next__()) def wahaha(): for i in range(2000000): yield '哇哈哈',i
监听文字输出
#只要有yield关键字的的函数都是生成器函数 #yield不能和return共用且需要写在函数内 def generator(): print(1) yield 'a' #生成器函数: 执行之后会得到一个生成器作为返回值。 ret = generator() print(ret) print(ret.__next__()) def wahaha(): for i in range(2000000): yield '哇哈哈',i #send的获取下一个值得效果和next基本一致, #只是在获取下一个值得时候,给上一值得位置 传递一个数据 #注意事项:第一次使用生成器必须用next,最后一个yield不能接受外部得值。 #例子: def generator1(): print(123) content = yield 1 print('==================',content) print(456) yield 2 g = generator1() ret1 = g.__next__() print('******',ret1) ret2 = g.send('hello') print('*********',ret2) #计算移动平均值 def average(): sum = 0 count = 0 avg = 0 while True: num = yield avg sum += num count +=1 avg = sum /count avg_g = average() avg_g.__next__() avg1 = avg_g.send(10) avg1 = avg_g.send(20) print(avg1) def sehndchegqi(): a = 'abcde' b = '12345' yield from a yield from b gg = sehndchegqi() for i in g: print(i) #列表推导式 egg_list = ['鸡蛋%s'%i for i in range(10)] print(egg_list) #输出结果: ['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', # '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9'] #生成器表达式 ggg = (i*i for i in range(10))#只能得到一个生成器ggg, for i in ggg: print(i) '''列表推导式和生成器表达式的不同:1.括号不同,2.返回值不同''' #相比去列表推导式,其括号不同 #返回值不一样=====几乎不占用内存。 '''------------各种推导式------------------''' #[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 #列表推导式 #30以内所有能被3整除的数 rett = [i for i in range(30) if i%3 == 0] print(rett) #30以内所有能被3整除的数 rett1 = [i*i for i in range(30) if i%3 ==0] print(rett1) #找到嵌套列表中名字含有俩个‘e’的所有名字 names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] name = [ name for lst in names for name in lst if name.count('e') ==2] print(name) #字典推导式 # 例一:将一个字典的key和value对调 mcase = {'a': 10, 'b': 34} # #{10:'a' , 34:'b'} msat = {mcase[k]:k for k in mcase} print(msat) # 例二:合并大小写对应的value值,将k统一成小写 mcase1 = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} # #{'a':10+7,'b':34,'z':3} mcasedic = {k.lower():mcase1.get(k.lower(),0)+ mcase1.get(k.upper(),0) for k in mcase1} print(mcasedic) # print(mcase_frequency) #集合推导式,自带结果去重功能 squared = {x**2 for x in [1, -1, 2]} print(squared)
习题小解
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() # for n in [1,10,5]: # g=(add(n,i) for i in g) n = 1 g=(add(n,i) for i in test()) n = 10 g=(add(n,i) for i in (add(n,i) for i in test())) n = 5 g=(15,16,17,18) print(list(g))