三元表达式、列表推导式、生成器表达式

三元表达式

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))
原文地址:https://www.cnblogs.com/hanbowen/p/9177776.html