Python之浅谈生成器

三元表达式

a=0
b=6
print (a)if a>b else print(b)

三元表达式只能写if的双分支结构

列表推导式

print(list(i for i in range(10)))#这种写法只有list和set才有用

字典生成式

print({k:v**3 for k,v in zip([a,b,c,d],[1,2,3,4])})#不能写这种代码,可读性太差

生成器

在Python中创建迭代器最方便的技术是使用生成器。生成器的语法类似于函数,但不返回值。为了显示序列中的每一个元素,会使用yield语句。

def range(start=0,end=None,long=1):#通过生成器来实现range内置方法
    if  end==None:
        start,end=0,start
    while start<end:
        yield start
        start+=long
for i  in range(6,10):
    print(i)

注意:我们使用关键字yield而不是return来表示结果。这表明在Python中,我们正在定义一个生成器而不是一个传统的函数。在同一函数中,将yield和return语句结合起来是非法的,除非是使生成器结束执行的return语句。

生成器表达式

print(tuple(i for i in range(1000000)))

生成器表达式与列表推导式的区别就是生成器表达式输出的是元组,列表推导式输出的是列表,而元组可以减少占用空间。

匿名函数

匿名函数就是没有名字的函数,匿名需要关键字lambda

匿名函数一般不单独使用,和 filter()/map()/sorted()/列表的sort()内置方法联用

 salary_dict = {
    'tim': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}

salary_list = list(salary_dict.items())
 print(max(salary_list,key=lambda i:i[1]))#求最大值
 print(min(salary_list,key=lambda i:i[1]))#求最小值

 print(list(filter(lambda i: i[1] < 5000, salary_list)))  #筛选出工资小于5000的人
 print(list(map(lambda i: i[1] + 2000, salary_list)))#每个人的工资加2000
原文地址:https://www.cnblogs.com/MrYang161/p/11352706.html