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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.17 Python基础知识 - 迭代器和生成器初识相关的知识,希望对你有一定的参考价值。

  可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象。

  列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表

  示例代码:

[ 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基础知识 - 迭代器和生成器初识的主要内容,如果未能解决你的问题,请参考以下文章

python---基础知识回顾迭代器和生成器

Python基础 ( 六 ) —— 迭代器和生成器

python基础-迭代器和生成器

python基础之三大器中迭代器和生成器

Python成长之路第五篇:Python基础之迭代器和生成器

python语法基础-函数-迭代器和生成器-长期维护