列表生成器
# 常见的是range()创建一个数字的列表 >>>[ x*x for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # 后边也可以加上判断语句 >>>[ x*x for x in range(10) if x%2 == 0] [0, 4, 16, 36, 64] # 字符也可以这么玩 >>> [m + n for m in ‘ABC‘ for n in ‘XYZ‘] [‘AX‘, ‘AY‘, ‘AZ‘, ‘BX‘, ‘BY‘, ‘BZ‘, ‘CX‘, ‘CY‘, ‘CZ‘]
生成器
# 生成器就是把列表生成器的[]换成(),或者在函数中使用yield关键字 >>> L = [x * x for x in range(10)] >>> L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> g = (x * x for x in range(10)) >>> g <generator object <genexpr> at 0x1022ef630> # 取值,可以使用next(),但大多数使用for # 斐波拉契数列 def fib(max): n,a,b = 0,0,1 while n < max: #print(b) yield b a,b = b,a+b n += 1 return ‘done‘ # 使用for循环打印想返回return值,需要捕获StopIteration错误,返回值包含在StopIteration的value中:
可以直接作用于for
循环的数据类型有以下几种:
一类是集合数据类型,如list
、tuple
、dict
、set
、str
等;
一类是generator
,包括生成器和带yield
的generator function。
这些可以直接作用于for
循环的对象统称为可迭代对象:Iterable
。
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator,它们表示一个惰性计算的序列
。
集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。
可以使用isinstance()
判断一个对象是否是Iterable
对象
原文地址:https://www.cnblogs.com/CrazyDemo/p/9431139.html
时间: 2024-10-10 22:15:25