📜  如何在Python中检查对象是否可迭代?

📅  最后修改于: 2022-05-13 01:54:55.282000             🧑  作者: Mango

如何在Python中检查对象是否可迭代?

简单来说,任何可以循环的对象都是可迭代的。例如,一个列表对象是可迭代的,一个 str 对象也是如此。列表编号和字符串名称是可迭代的,因为我们能够遍历它们(在这种情况下使用 for 循环)。在本文中,我们将了解如何在Python中检查对象是否可迭代。

例子:

示例 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