在Python中,如何确定对象是否是可迭代的?有没有类似的方法isiterable?到目前为止我找到的唯一解决办法就是打电话hasattr(myObj, '__iter__')但我不知道这有多蠢。
3 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
检查 __iter__
在序列类型上工作,但在例如字符串上会失败 在Python 2中..我也想知道正确的答案,在此之前,有一种可能性(也适用于字符串): try: some_object_iterator = iter(some_object)except TypeError as te: print some_object, 'is not iterable'
这个 iter
内建检查 __iter__
方法,或者在字符串的情况下, __getitem__
方法。 另一种一般的pythonic方法是假设一个可迭代的,如果它不能在给定的对象上工作,那么它就会优雅地失败。Python词汇表: Pythonic编程风格,它通过检查对象的方法或属性签名来确定对象的类型,而不是通过与某个类型对象的显式关系(“如果它看起来像 鸭子嘎嘎作响就像 鸭子,一定是 鸭子)通过强调接口而不是特定类型,精心设计的代码通过允许多态替换来提高其灵活性。鸭子类型避免使用type()或isinstent()进行测试。 相反,它通常采用EAFP(请求宽恕比许可容易)的编程风格。...
try: _ = (e for e in my_object)except TypeError: print my_object, 'is not iterable'
这个 collections
模块提供了一些抽象基类,允许询问类或实例是否提供特定功能,例如: from collections.abc import Iterableif isinstance(e, Iterable): # e is iterable
但是,这不检查可迭代的类。 __getitem__
.
RISEBY
TA贡献1856条经验 获得超5个赞
鸭型
try: iterator = iter(theElement)except TypeError: # not iterableelse: # iterable# for obj in iterator:# pass
类型检查
from collections.abc import Iterable # import directly from collections for Python < 3.3if isinstance(theElement, Iterable): # iterableelse: # not iterable
iter()
检查 isinstance(obj, Iterable)
检测注册为Iterable或具有 __iter__()
方法,但它不会检测到使用 __getitem__()
方法。确定对象是否可迭代的唯一可靠方法是调用 iter(obj)
.
添加回答
举报
0/150
提交
取消