Python中的迭代器

迭代器不能使用 * 和数字进行扩展,如下所示:

v = iter([0, 1, 2, 3, 4]) * 3
# TypeError: unsupported operand type(s) for *: 'list_iterator' and 'int'

迭代器和其他迭代器不能使用 + 进行连接,如下所示:

v = iter([0, 1, 2]) + iter([3, 4]) + iter([5, 6, 7, 8])

# TypeError: 不支持的操作数类型: 'list_iterator' 和 'list_iterator'

一个迭代器和另一个迭代器不能返回:

  • 它们的所有元素使用 '|'(并集:A ∪ B)。
  • 它们的共同元素使用 '&'(交集:A ∩ B)。
  • 在一个迭代器中而不在另一个迭代器中的元素使用 '-'(差集:A – B)。
  • 在一个迭代器或另一个迭代器中但不在两个迭代器中的元素使用 '^'(对称差集:A Δ B)。
v = iter([0, 4]) | iter([0, 2, 4])
# TypeError: unsupported operand type(s) for |: 'list_iterator' and
# 'list_iterator'

 

v = iter([0, 4]) & iter([0, 2, 4])
# TypeError: 不支持的操作数类型:'list_iterator' 和 
# 'list_iterator'

 

v = iter([0, 4]) - iter([0, 2, 4])
# TypeError: 不支持的操作数类型:'-': 'list_iterator' 和 
# 'list_iterator'

 

v = iter([0, 1, 2, 3]) ^ iter([0, 2, 4])
# TypeError: 不支持的操作数类型:'list_iterator' 和 'list_iterator'

 

迭代器可以使用for语句进行迭代,如下所示:

<1D 迭代器>:

for x in iter([0, 1, 2, 3, 4]):
    print(x)
# 0
# 1
# 2
# 3
# 4

<二维迭代器>:

for x in iter([iter([0, 1, 2, 3]), iter([4, 5, 6, 7])]):
for y in x:
        print(y)
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
<3D 迭代器>:
for x in iter([iter([0, 1]), iter([2, 3])]), iter([iter([4, 5]), iter([6, 7])])):
    for y in x:
        for z in y:
            print(z)
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7

迭代器可以通过赋值和 for 语句、函数以及 * 来解包,但不能通过 ** 解包,如下所示:

v1, v2, v3 = iter([0, 1, 2])

print(v1, v2, v3)
# 0 1 2
v1, *v2, v3 = iter([0, 1, 2, 3, 4, 5])
print(v1, v2, v3)  # 0 [1, 2, 3, 4] 5
print(v1, *v2, v3) # 0 1 2 3 4 5
for v1, v2, v3 in iter([iter([0, 1, 2]), iter([3, 4, 5])]):
    print(v1, v2, v3)
# 0 1 2
# 3 4 5

 

for v1, *v2, v3 in iter([iter([0, 1, 2, 3, 4, 5]),
                         iter([6, 7, 8, 9, 10, 11])]):
print(v1, v2, v3)
print(v1, *v2, v3)
# 0 [1, 2, 3, 4] 5
# 0 1 2 3 4 5
# 6 [7, 8, 9, 10] 11
# 6 7 8 9 10 11
print(*iter([0, 1]), 2, *iter([3, 4, *iter([5])]))
# 0 1 2 3 4 5
print([*iter([0, 1]), 2, *iter([3, 4, *iter([5])])])
# [0, 1, 2, 3, 4, 5]
def func(p1='a', p2='b', p3='c', p4='d', p5='e', p6='f'):
    print(p1, p2, p3, p4, p5, p6)

func()
# a b c d e f

这段代码定义了一个名为 `func` 的函数,接受六个参数,默认值分别为 ‘a’、’b’、’c’、’d’、’e’ 和 ‘f’。当调用 `func()` 时,它将打印出这六个参数的值。

func(*iter([0, 1, 2, 3]), *iter([4, 5]))
# 0 1 2 3 4 5

def func(p1='a', p2='b', *args):

    print(p1, p2, args)
    print(p1, p2, *args)
print(p1, p2, ['A', 'B', *args, 'C', 'D'])

func()
# a b ()
# a b
# a b ['A', 'B', 'C', 'D']

func(*iter([0, 1, 2, 3]), *iter([4, 5]))
# 0 1 (2, 3, 4, 5)
# 0 1 2 3 4 5
# 0 1 ['A', 'B', 2, 3, 4, 5, 'C', 'D']

更多