小编典典

在 Python 中,如何确定对象是否可迭代?

all

有没有类似的方法isiterable?到目前为止,我发现的唯一解决方案是致电

hasattr(myObj, '__iter__')

但我不确定这是多么万无一失。


阅读 160

收藏
2022-02-25

共1个答案

小编典典

  1. 检查__iter__序列类型的工作,但它会失败,例如 Python 2 中的字符串。我也想知道正确的答案,在那之前,这是一种可能性(也适用于字符串):

    from __future__ import print_function
    

    try:
    some_object_iterator = iter(some_object)
    except TypeError as te:
    print(some_object, ‘is not iterable’)

iter内置检查__iter__方法或在字符串的情况下检查__getitem__方法。

  1. 另一种通用的pythonic方法是假设一个可迭代的,然后如果它不适用于给定的对象,则优雅地失败。Python 词汇表:

Pythonic 编程风格,通过检查对象的方法或属性签名而不是通过与某个类型对象的显式关系来确定对象的类型(“如果它看起来像 鸭子 ,叫起来像
鸭子 ,它一定是 鸭子 。”)通过强调接口精心设计的代码不是特定类型,而是通过允许多态替换来提高其灵活性。Duck-typing
避免了使用 type() 或 isinstance() 的测试。 相反,它通常采用 EAFP(比许可更容易请求宽恕)编程风格。

>     try:
   _ = (e for e in my_object)
except TypeError:
   print my_object, 'is not iterable'
  1. collections模块提供了一些抽象基类,允许询问类或实例是否提供特定功能,例如:

    from collections.abc import Iterable
    

    if isinstance(e, Iterable):
    # e is iterable

但是,这不会检查可通过 迭代的类__getitem__

2022-02-25