可迭代对象(Iterable)指的是那些能够一次返回一个元素的对象,这样就可以在 for
循环或者在其他需要迭代的上下文中使用。以下是一些常见的可迭代对象类型:
- 列表(List):如
['a', 'b', 'c']
。 - 元组(Tuple):如
(1, 2, 3)
。 - 集合(Set):如
{1, 2, 3}
。 - 字典(Dictionary):如
{'a': 1, 'b': 2}
。注意,字典是可迭代的,但迭代的是键(key),如果你想要迭代键和值,可以使用.items()
方法。 - 字符串(String):如
'hello'
,迭代时会逐个返回字符。 - 生成器(Generator):通过生成器函数或生成器表达式创建,使用
yield
关键字。 - 文件对象(File Object):如
open('file.txt')
返回的对象,可以迭代文件中的每一行。 - 迭代器(Iterator):任何实现了
__iter__()
和__next__()
方法的对象,如上面提到的生成器。 - 集合的子类(如frozenset):不可变的集合,但仍然是可迭代的。
- 其他自定义对象:只要实现了
__iter__()
方法,返回一个迭代器,就可以是可迭代的。
以下是几个例子:
# 列表
for item in [1, 2, 3]:
print(item)
# 元组
for item in (1, 2, 3):
print(item)
# 字符串
for char in "hello":
print(char)
# 集合
for item in {1, 2, 3}:
print(item)
# 字典,迭代键
for key in {'a': 1, 'b': 2}:
print(key)
# 生成器表达式
for item in (x * x for x in range(3)):
print(item)
# 生成器函数
def gen(n):
for i in range(n):
yield i
for item in gen(3):
print(item)
在Python中,可以通过内置函数 iter()
来检查一个对象是否是可迭代的。如果对象是可迭代的,iter()
会返回一个迭代器;如果不是,将引发 TypeError
。例如:
try:
iter([1, 2, 3]) # 返回一个迭代器
except TypeError:
print("Not iterable")
try:
iter(42) # 42 不是可迭代的,将引发 TypeError
except TypeError:
print("Not iterable")