想想自己的初衷,自己现在在做什么,未来又会怎样
——杰
在python的进阶中,推导式、生成器、迭代器都是非常重要的一部分内容。小编经过一段时间的学习,发现这三者之间存在着很密切的联系。
推导式:
常见的是列表推导式:
【表达式 for 变量 in 列表】
比如:
x=[i for i in list[1,2,3,4,5]]
等同于
x=[]
for i in list[1,2,3,4]
x.append(i)
推导式,很大程度上,展现出来python的简单、优美的特点。就是一句话,顶得上,其他语言得好几句。
列表推导式,可以分为如下两种:
(1)if–else
x=[i+1 if i %2 ==0 else i+2 for i in [1,2,3,4,5,6,7,8,9]]
print(x)
[3, 3, 5, 5, 7, 7, 9, 9, 11]
(2)if
x=[i+1 for i in [1,2,3,4,5,6,7,8,9] if i %2 ==0 ]
print(x)
[3, 5, 7, 9]
此外还有集合推导式、字典推导式
集合推导式,和列表推导式,几乎一样,区别在于,集合不允许重复。
字典推导式,在形式上和列表推导式的不同,就是如下
{key ,value for k,v in dict.item}
生成器
生成器的存在,是为了避免内存空间的大量浪费,不会一次性把内存分配完,而是根据需要,逐步生成
第一种,就是把列表生成式的【】,换成(),就行了
x=(i+1 for i in [1,2,3,4,5,6,7,8,9])
print(type(x))
<class 'generator'>
第二种,就是利用yield,这个在复杂的函数中,经常使用。只要见到yield函数,可以直接判断,是生成器。
def x():
while True:
print(3)
yield
该生成器,如何使用呢!
这边我们需要用到next()和_next_(),来调用。每调用一次,yield就暂停,并抛出一个字。
def x():
while True:
print(3)
yield
print(next(x()))
print(x().__next__())
3
None
3
None
迭代器
生成器,天生是迭代器。迭代器的定义,就是可以用next()函数来调用,并返回一个函数值。
列表、字符串等是可迭代,但是并不是迭代器。是否可迭代,需要借助isinstance(f,Iterable)
来判断。
要生成迭代器,可以借助iter函数来生成。
iter(list)
即可