欢迎访问宙启技术站
智能推送

「Python函数」迭代器函数的用法和注意事项?

发布时间:2023-06-13 14:24:33

Python中,可以使用迭代器函数来遍历数据序列,比如列表、元组、字符串、字典等。迭代器是一个可以返回一系列值的对象,每次返回一个值,直到所有的值被返回完毕。 迭代器函数在处理大型数据集合时非常有用,因为他们使用延迟计算的方式进行迭代过程,不会加载完所有数据后再进行操作,而是等到有需要时读取下一个元素。

本文将介绍 Python中的常见迭代函数及其用法和注意事项。

1. iter()函数

iter()函数用于生成迭代器对象,用来遍历序列。iter()的参数可以是列表、元组、字符串、字典等,返回值是一个可迭代对象。

语法:iter(iterable)

示例:

lst = [1,2,3,4,5]
it = iter(lst)
print(next(it))

输出结果为1,因为迭代器会一次返回序列中的每一个元素,通过next()函数来返回下一个元素。

2. next()函数

next()函数用于获取迭代器的下一个值,如果迭代器已经没有下一个值,抛出StopIteration异常。

语法:next(iterator[, default])

参数说明:

- iterator:迭代器对象。

- default:如果没有下一个元素,返回默认值。

示例:

lst = [1,2,3,4,5]
it = iter(lst)
print(next(it))
print(next(it))

输出的结果分别为1和2,因为next()会依次返回迭代器中的每一个元素。

如果迭代器已经到了底部,再次执行next(),会抛出StopIteration异常:

lst = [1,2,3,4,5]
it = iter(lst)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))

输出结果为:

1
2
3
4
5
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    print(next(it))
StopIteration

3. zip()函数

zip()函数用于将多个可迭代对象打包成元组,然后返回这些元组的生成器。zip()函数在处理多个序列的时候非常方便,可以节省很多内存和CPU资源。

语法:zip([iterable, ...])

参数说明:

- 参数iterable:多个可迭代对象。

示例:

lst1 = [1,2,3,4,5]
lst2 = ['a','b','c','d','e']
it = zip(lst1,lst2)

print(list(it))

输出结果为:

[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]

4. map()函数

map()函数用于将函数作用于序列中的每一个元素,并返回结果列表。

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

参数说明:

- function:函数对象。

- iterable:一个或多个序列。

示例:

lst = [1,2,3,4,5]
map_lst = map(lambda x : x**2, lst)
print(list(map_lst))

输出结果为:

[1, 4, 9, 16, 25]

5. filter()函数

filter()函数用于从序列中过滤出符合条件的元素,并返回一个生成器对象。

语法:filter(function, iterable)

参数说明:

- function:判断条件的函数。

- iterable:序列对象。

示例:

def is_odd(n):
    return n%2 == 1

lst = [1,2,3,4,5]
filter_lst = filter(is_odd, lst)
print(list(filter_lst))

输出结果为:

[1, 3, 5]

注意事项:

1. 迭代器只能往前遍历,不能后退,也不能重复遍历。

2. 在使用迭代器时,需要注意到StopIteration异常,遍历序列时要及时捕获这个异常。

3. 迭代器函数返回的是生成器对象,而不是具体的数据,要获取具体数据需要使用next()函数。

4. 如果需要遍历数据多次,建议使用列表或元组,并将其转化为迭代器。

5. 在迭代器函数中使用yield语句可以将函数变为生成器函数,生成器函数不需要return语句来返回值,而是通过yield语句返回一个值,并可以保存当前运行状态,来在下一次调用时继续运行。