码迷,mamicode.com
首页 > 编程语言 > 详细

1.17 Python基础知识 - 迭代器和生成器初识

时间:2017-03-13 18:58:29      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:输出   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

 

 

 

待续。。。

 

 

  

 

1.17 Python基础知识 - 迭代器和生成器初识

标签:输出   next   top   style   exp   高效   exce   rabl   知识   

原文地址:http://www.cnblogs.com/topspeedking/p/6544249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!