print(item)
什么是生成器:
生成器是一个包含yield表达式的函数,只要一个函数中有了yield表达式,当调用这个函数的时候,函数体的代码压根就不会执行,它只是会返回一个生成器对象。如果访问一个生成器迭代器,每次访问到的值都是动态生成的(比如典型代码中的变量i),即是yield右边的值,并冻结当前状态,等待下一次访问。对于生成器对象可以将其理解为一种值的顺序生成规则的描述,生成器对象会一直维护自己的生成规则上下文,直到结束(当然,也可以不结束)。
应用场景:
如果需求是动态的生成一个列表,然后其它函数会
一次性
访问这个列表中的项,做相应的处理工作。
带来的好处:
1. 不必返回整个列表对象,只返回生成规则描述,如果元素数量较大,可以节省大量内存。生成器甚至可以生成一个无限序列,只要生成规则永不停止即可。
2. 逻辑清晰,一眼就能看到值是如何返回的。
注意的点:
生成器对象是有状态的,只能访问一次。这也很容易理解,因为生成器只是一个值的生成规则,加上其上下文,不像列表一样保存了所有的值。
也可以使用原生的迭代器协议访问生成器,但是需要手动处理迭代器结束时的StopIteration异常:
gen = mygen()
while True:
data = next(gen)
print(data)
except StopIteration:
print('Iteration done')
break
典型代码:def mygen(): i = 0 while i < 100: yield i i += 1if __name__ == '__main__': gen = mygen() for item in gen: print(item)什么是生成器:生成器是一个包含yield表达式的函数,只要一个函...
列表
生成
式即List Comprehensions,是
Python
内置的非常简单却强大的可以用来创建list的
生成
式。
在C语言等其他语言中,for循环一般是这样的
如果
python
也这么写,那么真该看下
python
的基础教程了~
但要注意的是,
需要
加一个[]来,否则会报错…
在上面的例子中,不仅可以嵌套for,甚至可以嵌套if语句
再看看,原来是什么样子
两个循环呢?
原来可能是这样的?
现在可以这样了!!!
您可能感兴趣的文章:
Python
列表
推导式与
生成器
用法分析
Python
3中的
列表
生成
式、
生成器
与迭代器实例详解pyt
列表
生成
式:会将所有的结果全部计算出来,把结果存放到内存中,如果
列表
中数据比较多,就会占用过多的内存空间,可能会导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况
列表
生成器
:会创建一个
列表
生成器
对象,不会一次性的把所有结果都计算出来,如果
需要
获取数据,可以
使用
next()函数来获取,但是
需要
注意,一旦next()函数获取不到数据,会导致出现StopIteration异常错误,可以
使用
for循环遍历
列表
生成器
,获取所有数据
需要
视情况而定,如果数据量比较大,推荐
使用
生成器
python
2.7中就是range(
生成
式) 和 xrange(
生成器
)的区别
列表
生成
式是快速
生成
一
这篇文章主要介绍了
python
中的
列表
生成
式、
生成器
表达式、模块导入 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,
需要
的朋友可以参考下
5.16
列表
生成
式
for i in range(100):
l.append('egg%s' %i)
print(l)
l=['egg%s' %i for i in range(100)]
l=['egg%s' %i for i in range(1000) if i > 10]
print(l)
5.17
列表
生成
式与
生成器
表达式的应用
names=['egon','alex_sb','wupeiqi','yuan
在
Python
中,已知
列表
a=[1,2,3,4,5,6],如何
动态
的创建一个
列表
使其里面的每一个元素值都为a
列表
的5倍?一、对于这个问题小赵同学想到了三种方法,和大家分享一下第一种方法:
使用
列表
解析式,这是最简单的方法了。具体看下面的代码:第二种方法:
列表
解析式的一般形式第三种方法:
使用
索引添加元素二、问题扩展:对于
列表
a中的元素有选择的乘5倍,当a[i]>3时,b[i]=a[i]*5,其余情况b[i]=a[i].三、总结
一、对于这个问题小赵同学想到了三种方法,和大家分享一下
第一种方法:
使用
列表
解
Python
-
列表
生成器
列表
生成器
用于快速
生成
列表
,
使用
方法就是在[]中
使用
循环判断,操作等方法得到最终的list,而无需遍历
>>> [x*3 for x in [1,2,3] if x == 3]
上面的意思就是迭代[1,2,3],如果x等于3 就将x*x放入list中
可以两层循环,形成一个全排列
>>> [x + y for x in ['...