当前位置: 首页 > 面试题库 >

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

郭俊拔
2023-03-14
问题内容

有像isiterable这样的方法吗?到目前为止我找到的唯一解决办法就是打电话

hasattr(myObj, '__iter__')

但是我不确定这有多愚蠢。


问题答案:
  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词汇表:

通过检查对象的方法或属性签名而不是通过与某种类型对象的显式关系来确定对象类型的Python编程风格(“如果它看起来像鸭子,并且像鸭子一样嘎嘎叫,那一定是鸭子。”)通过强调接口经过精心设计的代码(而非特定类型)通过允许多态替换来提高其灵活性。鸭式输入避免使用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__。



 类似资料:
  • 问题内容: 我需要确定JavaScript中的数组中是否已存在对象。 例如(dummycode): 现在,“carBrands”数组包含所有实例。我现在正在寻找一种快速解决方案,以检查car1,car2,car3或car4的实例是否已经在carBrands数组中。 例如: car1和car4包含相同的数据,但是不同的实例,应测试它们是否相等。 我是否在创建时向对象添加了哈希值?还是有更快的方法来用

  • 我有一个函数需要一个iterable: 在javascript中,我将利用: 取自Tomas Kulich的原始答案。 这将导致下一个代码: 有没有一种方法可以利用TypeScript的打字功能而不是使用这个即时功能?

  • rank ▲ ✰ vote url 75 343 88 324 url 在Python中如何直达搜一个对象是可迭代的? 有没有一个isiterable的方法?我找到的解决方法: hasattr(myObj, '__iter__') 但是我不知道这是不是最好的. 鸭子类型 try: iterator = iter(theElement) except TypeError: # no

  • 问题内容: 我需要使用AWS开发工具包检查文件是否存在。这是我在做什么: 它可以工作,但问题是当对象不存在时,回调(带有参数err和url)不会返回错误,并且当我尝试访问URL时,它会显示“ NoSuchObject”。 当对象不存在时,该方法是否应该返回错误对象?如何确定对象是否存在?我真的需要打电话给返回的URL吗? 问题答案: 在创建签名的URL之前,您需要检查文件是否直接从存储桶中存在。一

  • 问题内容: 我有一个自定义类对象(下面是示例)。 使用:我想将所有子列表“合并”到一个大列表中。因此,我认为我需要使自定义类成为可迭代的。 这是我的自定义类的示例。 我实现了,但是似乎没有用。他们甚至没有被召集。 知道我做错了什么吗? 注意:使用Python 3.3 问题答案: 当您尝试遍历类实例时调用的是什么: 是在返回的对象上调用的内容(在python2.x上,不是,我一般都对它们都使用别名,

  • 问题内容: 如果我有rdd,我如何理解数据为key:value格式?有没有办法找到相同的东西-像type(object)告诉我对象的类型。我试过了,但这只是说。 假设我有一个类似的数据,我使用 和得到了。有没有一种方法可以将x和y定义 为键和值?还是键必须是单个值?我注意到,如果我使用和函数来获取数据,那么将这些数据定义为键值对变得容易得多 问题答案: Python是一种动态类型化的语言,PySp