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

   Python内置的可迭代对象

range  :range(start,stop[,step])

map  :map(function,iterable,...)

itertools.starmap  :itertools.starmap(function,iterable)

filter  :filter(function,iterable)  filterfalse(predicate,iterable)

itertools.filterfalse  :

zip  :zip(*iterables)

zip_longest  :zip_longest(*iterables,fillvalue=None)

enumerate  :enumerate(iterable,start=0)

待续。。。

  

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