三元表达式
x,y=10,20res=x if x>y else yprint(res) #20
列表推导式
l=[]for x in range(5): l.append(x*2) l=[x*2 for x in range(5)]l=[x*2 for x in range(5) if x>1]
优点:方便,改变了编程习惯,可称之为声明式编程
字典生成式
#字典生成式# s1='hello'# l1=[1,2,3,4,5]# res=zip(s1,l1)# print(res)# print(list(res))# keys=['name','age','sex']# values=['egon',18,'male']# res=zip(keys,values)# print(list(res))# print(list(res))# d={}# for k,v in zip(keys,values):# d[k]=v# print(d)# keys=['name','age','sex']# values=['egon',18,'male']# d={k:v for k,v in zip(keys,values)}# print(d)info={ 'name': 'egon', 'age': 18, 'sex': 'male'}keys=info.keys()# print(keys)# iter_keys=keys.__iter__()# values=info.values()# print(values)# d={k:v for k,v in zip(keys,values)}# print(d)# s={i for i in range(10)}# print(s,type(s))
生成器表达式
#1、把列表推导式的[]换成()就是生成器表达式g=(i for i in range(10))print(g)print(next(g))print(next(g)) with open('a.txt',encoding='utf-8') as f: nums=(len(line) for line in f) print(max(nums)) print(max(nums)) #报错 ,nums生成器值取完了 ValueError: max() arg is an empty sequenceprint(max(nums)) #报错 , 文件关闭 nums生成器无法取值 ValueError: max() arg is an empty sequence
#2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
>>> chicken=('鸡蛋%s' %i for i in range(5))>>> chickenat 0x10143f200>>>> next(chicken)'鸡蛋0'>>> list(chicken) #因chicken可迭代,因而可以转成列表['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]
#3、优点:省内存,一次只产生一个值在内存中
review
1、生成器 def func(): yield g=func() next(g) x=yield 2、三元表达式 res=x if 条件 else y 3、列表推导式,字典生成式,生成器表达式 l=[表达式 for i in 可迭代对象 if 条件] g=(表达式 for i in 可迭代对象 if 条件) d={k:v for i in 可迭代对象 if 条件} 4、max,zip max(可迭代对象) 生成器=zip(可迭代对象1,可迭代对象2) g=zip('hello',[1,2,3]) # print(g) print(list(g))