Python中用于创建可迭代对象的函数
发布时间:2023-05-21 07:05:55
Python中有多种用于创建可迭代对象的函数,其中最常用的是生成器函数和迭代器协议。
1. 生成器函数
生成器函数是一种特殊的函数,可以在函数中使用yield语句来生成一个序列。此时该函数返回的是一个生成器对象,可以进行迭代操作。生成器函数非常灵活,可以用于生成无限序列或者按需生成序列等。
示例:
def fib(n):
a, b = 0, 1
for i in range(n):
yield a
a, b = b, a + b
for i in fib(10):
print(i)
输出:
0 1 1 2 3 5 8 13 21 34
2. 迭代器协议
如果一个对象实现了__iter__()和__next__()方法,那么它就是一个可迭代对象。__iter__()方法返回一个迭代器对象,__next__()方法返回序列中的下一个元素。在迭代器取完序列中的元素后,__next__()方法应该抛出StopIteration异常,以表示迭代结束。
示例:
class Counter:
def __init__(self, n):
self.n = n
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current == self.n:
raise StopIteration
else:
self.current += 1
return self.current
for i in Counter(5):
print(i)
输出:
1 2 3 4 5
3. zip()
zip()函数可以将多个可迭代对象组合成一个元组序列,并返回一个迭代器对象。当输入序列长度不同时,zip()会停止在最短的序列处终止。
示例:
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
for i in zip(x, y, z):
print(i)
输出:
(1, 4, 7) (2, 5, 8) (3, 6, 9)
4. map()
map()函数可以将一个函数应用到一个或多个可迭代对象的相应元素上,并返回一个迭代器对象。
示例:
def multiply(x):
return x * 2
x = [1, 2, 3]
y = map(multiply, x)
print(list(y))
输出:
[2, 4, 6]
5. filter()
filter()函数可以筛选可迭代对象中的元素,只返回符合条件的元素。该函数返回一个迭代器对象。
示例:
def is_odd(x):
return x % 2 == 1
x = [1, 2, 3, 4, 5]
y = filter(is_odd, x)
print(list(y))
输出:
[1, 3, 5]
总的来说,Python提供了丰富的可迭代对象的创建函数,包括生成器函数、迭代器协议、zip()、map()和filter()等。应根据实际需要选择合适的函数使用。
