【发布时间】:2020-09-30 11:14:42
【问题描述】:
我阅读了一些非常古老的答案(10 年),他们说在 python 2.x 中,这种迭代质量只是假定的。
但是像 3.9 这样的现代 python 呢?我可以假设一个项目和对象可以迭代吗?
阿比
【问题讨论】:
-
可能不是最好的方法,但是任何具有
__iter__方法的对象都是迭代的好候选
标签: python python-3.x
我阅读了一些非常古老的答案(10 年),他们说在 python 2.x 中,这种迭代质量只是假定的。
但是像 3.9 这样的现代 python 呢?我可以假设一个项目和对象可以迭代吗?
阿比
【问题讨论】:
__iter__ 方法的对象都是迭代的好候选
标签: python python-3.x
请参考下面的代码并传递你的对象来判断它是否是可迭代的。
def isiterable(obj):
try:
iter(obj)
return True
except TypeError:
return False
美好的一天!
【讨论】:
闪亮的新typing 模块正是为此而生。它包含所有类型。
from typing import Iterable
isinstance([], Iterable) # True
isinstance(None, Iterable) # False
【讨论】:
typing 不存在用于运行时检查。较旧的collections.abc 存在于此,例如collections.abc.Iterable.
isinstance 用于可迭代对象,因为它无法识别旧样式的可迭代对象。看来@Prince 的回答是推荐的方式。