如何在Python中检查对象是否可迭代?
简单来说,任何可以循环的对象都是可迭代的。例如,一个列表对象是可迭代的,一个 str 对象也是如此。列表编号和字符串名称是可迭代的,因为我们能够遍历它们(在这种情况下使用 for 循环)。在本文中,我们将了解如何在Python中检查对象是否可迭代。
例子:
Input: “Hello”
Output: object is not iterable
Explanation: Object could be like( h, e, l, l, o)
Input: 5
Output: ‘int’ object is not iterable
示例 1:
Python3
# code
name = "Hello"
for letter in name:
print(letter, end = " ")
Python3
# code
number = 5
for i in number:
print(i)
Python3
# code
name = 'Roster'
if hasattr(name, '__iter__'):
print(f'{name} is iterable')
else:
print(f'{name} is not iterable')
Python3
# code
from collections.abc import Iterable
name = 'Roster'
if isinstance(name, Iterable):
print(f"{name} is iterable")
else:
print(f"{name} is not iterable")
Python3
# code
name = "Roster"
try:
iter(name)
print("{} is iterable".format(name))
except TypeError:
print("{} is not iterable".format(name))
输出:
H e l l o
示例 2:
蟒蛇3
# code
number = 5
for i in number:
print(i)
输出
TypeError: 'int' object is not iterable
但是, int对象不可迭代,float 对象也是如此。整数对象编号不可迭代,因为我们无法循环遍历它。
检查对象的可迭代性
我们将探索检查对象是否可迭代的不同方法。我们使用hasattr()函数来测试字符串对象名称是否具有__iter__属性来检查可迭代性。但是,此检查并不全面。
方法一:使用__iter__方法检查。
蟒蛇3
# code
name = 'Roster'
if hasattr(name, '__iter__'):
print(f'{name} is iterable')
else:
print(f'{name} is not iterable')
输出:
Roster is iterable
方法二:使用 collections.abc 模块的 Iterable 类。
我们可以通过检查一个对象是否是 Iterable 类的实例来验证它是否是可迭代的。实例检查使用 Iterable 类将字符串对象报告为可迭代正确。这也适用于Python 3。对于Python 3.3 及更高版本,您必须从collections.abc而不是像这样的集合导入 Iterable 类:
蟒蛇3
# code
from collections.abc import Iterable
name = 'Roster'
if isinstance(name, Iterable):
print(f"{name} is iterable")
else:
print(f"{name} is not iterable")
输出:
Roster is iterable
方法三:使用 iter() 内置函数。
iter内置函数的工作方式如下:
- 检查对象是否实现__iter__,并调用它来获取迭代器。
- 如果失败, Python会引发TypeError ,通常说“C 对象不可迭代”,其中 C 是目标对象的类。
代码:
蟒蛇3
# code
name = "Roster"
try:
iter(name)
print("{} is iterable".format(name))
except TypeError:
print("{} is not iterable".format(name))
输出:
Roster is iterable