码迷,mamicode.com
首页 > 编程语言 > 详细

Python之浅谈生成器

时间:2019-08-14 17:07:14      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:表达式   int   sea   lam   long   分支   zip   href   max   

三元表达式

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

Python之浅谈生成器

标签:表达式   int   sea   lam   long   分支   zip   href   max   

原文地址:https://www.cnblogs.com/MrYang161/p/11352706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!