简单了解python 生成器 列表推导式 生成器表达式
作者:Clara51 发布时间:2023-12-05 09:21:02
标签:python,生成器,列表推导式,生成器表达式
生成器就是自己用python代码写的迭代器,生成器的本质就是迭代器。
通过以下两种方式构建一个生成器:
1、通过生成器函数
2、生成器表达式
生成器函数:
函数
def func1(x):
x += 1
return x
print(func1(5))
生成器函数
def func1(x):
x += 1
yield x
g_obj = func1(5)
print(g_obj.__next__())
一个next对应一个yield。
yield VS return
return 结束函数,给函数的执行者返回值
yield 不会结束函数,一个next对应一个yield,给生成器对象。__next__()返回值。
生成器函数 VS 迭代器
区别1:自定制的区别:
l1 = [1,2,3,4,5]
l1.__iter__()
def func1(x):
x += 1
yield x
x += 3
yield x
x += 5
yield x
g1 = func1(5)
print(g1.__next__())
print(g1.__next__())
print(g1.__next__())
区别2:内存级别的区别。
迭代器是需要可迭代对象进行转化,可迭代对象非常占内存
生成器直接创建,不需要转化,从本质就节省内存
send & next
send与next一样,也是对生成器取值(执行一个yield)的方法。
send 可以给上一个yield传值,第一次取值永远都是next
最后一个yield永远也得不到send的值
列表推导式:一行代码搞定所需要的任何列表
循环模式 格式:[变量(加工后的变量)for 变量 in interable
lis = [i for i in range(1,101)]
print(lis)
lis = ['骑士计划%s期'% i for i in range(1,16)]
print(lis)
lis = [i**2 for i in range(1,11)]
print(lis)
print([i for i in range(1,31) if i % 3 == 0])
print([i*i for i in range(1,31) if i % 3 is 0 ])
筛选模式:
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
print([q for name in names for q in name if q.count('e') >= 2])
列表推导式
优点:一行解决,方便
缺点:容易着迷,不易排错,不能超过三次循环
列表推导式不能解决所有列表的问题,无需刻意使用
生成器表达式:将列表推导式的 [] 换成 () 即可
g = (i for i in range(199))
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
来源:https://www.cnblogs.com/Clara51/p/9504677.html


猜你喜欢
- 前言LogEntry是在后台开发中经常用到的模块,它在admin是默认开启的。可以使用LogEntry模块记录所有用户的操作记录。一方面可以
- 如何判断一个数值(字符串)为整数不严格检查方法浮点数的自带方法is_integer()如果确定输入的内容为浮点数,是可以直接使用float数
- 1.第一种就是直接调用 window.print()方法这种方法的坏处就是 默认打印整个页面,不能打印局部页面。2.第二种使用v-print
- 当然可以,我们使用强大的fso对象来获取文件夹的大小请敲入如下代码即可:<%Set MyFileSize =&nb
- 我就废话不多说了,大家还是直接看代码吧!stdi, stdo, stde = sys.stdin, sys.stdout, sys.stde
- 最近在用Pycharm学习Python的时候,总有两个地方感觉不是很舒服,比如调用方法的时候区分大小写(thread就不会出现Thread,
- 说到关于请求方法的分支,让我们来看一下可以用什么好的方法来实现它。 考虑这个 URLconf/view 设计:# urls.pyfrom d
- 这篇文章主要介绍了python Jupyter运行时间实例过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- jQuery源码里自己也有很多用到each方法。其实jQuery里的each方法是通过js里的call方法来实现的。下面简单介绍一下call
- Case:需要给一个现有的shp数据创建一个字段,并将属性表中原有的一个文本类型的属性转换为整型后填入新创建的字段。Problem:新字段创
- 如何用Response.Write调用代替内嵌表达式?我们可以利用下面的代码,注意:代码的每一行对响应流有一次写操作,所有的代码都包含在一个
- 今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了。查看MySQL字符集的命令是“show
- python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指
- 情感短文本分类TextRNN是一种循环神经网络(RNN)结构,特别适用于处理序列数据。它通过将上一个时刻的隐状态与当前时刻的输入进行结合,来
- 木马原理:入侵者使用诸如ASP图片木马生成器之类的工具将一张正常的图片与一个ASP木马文件合并成一个图片文件(即将对网站有害的ASP代码插在
- 原图矫正后我新建了个jz的文件夹放相机矫正所需要拍摄的图片,如下:共12张 # coding:utf-8import cv2imp
- 如何在SQL中启用全文检索功能?本文将通过实例向你剖折这个问题。这是一个全文索引的一个例子,首先在查询分析器中使用:use pubsgo--
- 今天使用shuffleNetV2+,使用自己的数据集,遇到了loss是nan的情况,而且top1精确率出现断崖式上升,这显示是不正常的。在网
- Python项目打包python本身是一种脚本语音,发布的话,直接发布源代码就可以了,但是,可能有些公司并不想发布源代码,那么,就涉及到打包
- 语法: text-overflow : clip | ellipsis 参数: clip : 不显示省略标记(...),而是简单的裁切 el