标签:输出 next top style exp 高效 exce rabl 知识
可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象。
列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表
示例代码:
[ i ** 2 for i in range(10) ] #输出结果 [0,1,4,9,16,25,36,49,64,81]
生成器表达式:可以简便快捷地返回一个生成器。生成器表达式的语法和列表解析式基本一样,只不过是将[]替换成()
生成器的数据只有在调用时才生成
示例代码:
a = ( i ** 2 for i in range(10)) print( a ) # 输出结果,打印的是生成器对象地址 <generator object <genexpr> at 0x000001A4118978E0>
调用方法1:
print(next(a)) #相当于 print(a.__next__())
调用方法2:
for i in a:
print(i)
调用方法3:
while True: try: print(next(a)) except StopIteration: break
生成器函数
示例代码:
def fib(): a,b = 0,1 while True: a,b = b,a+b yield b print(fib()) for f in fib(): if f < 1000: print(f) else: break # 输出结果 <generator object fib at 0x0000024F66A478E0> 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
迭代和可迭代对象:
1、可迭代对象:Iterable
系列对象都是可迭代对象,生成器函数和生成器表达式也是可迭代对象。
判断是不是可迭代对象通过collections模块中的方法进行测试,示例:
import collections a = ( i ** 2 for i in range(10) ) b = 123 print(isinstance(a,collections.Iterable)) print(isinstance(b,collections.Iterable)) # 输出结果 True False
2、迭代器:Iterator
可使用内置函数next(),调用迭代器的__next__()方法,依次返回下一个项目值的对象就是迭代器
import collections b = [1,2,3,4] print(isinstance(b,collections.Iterable)) print(isinstance(b,collections.Iterator)) # 输出结果,b是一个可迭代对象,但不是一个迭代器 True False
像列表,字典,元组都是可迭代对象,但不是迭代器,我们可以用内置函数iter()转换成迭代器,示例代码:
import collections b = [1,2,3,4] print(isinstance(b,collections.Iterable)) print(isinstance(b,collections.Iterator)) print(isinstance(iter(b),collections.Iterator)) # 输出结果 True False True
待续。。。
标签:输出 next top style exp 高效 exce rabl 知识
原文地址:http://www.cnblogs.com/topspeedking/p/6544249.html