生成器generator 迭代器 iterator 列表推导式
生成器 generator
生成器与迭代器是一种,生成器的本质就是迭代器,唯一的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是python提供的,或者转化得来的。
一个包含yield关键字的函数就是一个生成器函数
并且yield不能和return共用,并且yield只能用在函数内。
- 生成器Demo:
import time def generator_demo(n): "这个函数在每次循环时都会产生一个值,之后将其返还给它的调用者。" "有yield的函数称为生成器,这个函数就是生成器函数" for i in range(1, n+1): yield f"{i} square = {[i**2]}" g = generator_demo(10000) # 创建生成器对象 print(g) # <generator object generator_demo at 0x0000020C906CC660> # 在一个for循环中时,在循环中每一次完成函数的yield语句后,控制权都会返还给函数 for i in g: print(i) time.sleep(1)
迭代器 iterator
- 迭代是访问集合元素的一种方式;
- 迭代器是一个可以记住遍历的位置的对象。
- 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
- 迭代器有两个基本的函数iter() 和 next()
- 字符串,列表,元组对象都可以用于创建迭代器:
list = [1, 2, 3, 4]
it = iter(list)
print(next(it)) # 1
print(next(it)) # 2
- 迭代器对象可以用for遍历:
list = [1, 2, 3, 4]
it = iter(list)
for i in it:
print(i, end=" ") # 1 2 3 4
- 也可以使用next()函数:
import sys
list = [1, 2, 3, 4]
it = iter(list)
while True:
try:
print(next(it))
except StopIteration:
sys.exit()
列表推导式
-
描述:
- 是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。
-
共有三种推导式:
-
列表(list)推导式
l1 = [i for i in range(11) if i % 3 == 0] print(l1) # [0, 3, 6, 9] l2 = [i for i in range(1, 11)] print(l2) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] l3 = [i**2 for i in range(1, 7)] print(l3) # [1, 4, 9, 16, 25, 36]
-
-
字典(dict)推导式
d = {v.lower(): k.upper() for k, v in dict.items()} print(d) # {'apple': 'A', 'button': 'B'}
-
列表(set)推导式
s1 = {i+i for i in "python"} print(s1) # {'tt', 'pp', 'yy', 'hh', 'oo', 'nn'}