三元表达式
x,y=10,20 res=x if x>y else y print(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 sequence print(max(nums)) #报错 , 文件关闭 nums生成器无法取值 ValueError: max() arg is an empty sequence
#2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
>>> chicken=('鸡蛋%s' %i for i in range(5)) >>> chicken <generator object <genexpr> at 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))