栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何检查对象是否是Python中的迭代器?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何检查对象是否是Python中的迭代器?

在Python 2.6或更高版本中,用于此类行为检查的内置习惯用法是“成员资格检查”,其中

collections
包含标准库模块中的抽象基类:

>>> import collections>>> isinstance('ciao', collections.Iterable)True>>> isinstance(23, collections.Iterable)False>>> isinstance(xrange(23), collections.Iterable)True

的确,这种检查是新抽象基类设计的主要原因(第二个重要的问题是在某些情况下提供“ mixin功能”,这就是为什么它们是ABC而不是接口的原因-但这不是)
t适用于

collections.Iterable
严格
存在允许使用
isinstance
或进行此类检查的情况
issubclass
。ABC允许实际上没有从其继承的类被“注册”为子类,因此此类类可以成为ABC的“子类”进行此类检查;并且,他们可以在内部执行特殊方法的所有必要检查(
__iter__
在这种情况下),因此您不必这样做。

如果您仍旧使用Python的较旧版本,则“请求宽恕比允许许可更好”:

def isiterable(x):  try: iter(x)  except TypeError: return False  else: return True

但这并不像新方法那样简洁明了。

请注意,对于这种特殊情况,您通常会希望对字符串进行特殊处理(可迭代,但是大多数应用程序上下文无论如何都希望将其视为“标量”)。无论您使用哪种方法来检查可迭代性,如果您需要这种特殊的大小写,只需在其前面添加一个检查即可

isinstance(x,basestring)
,例如:

def reallyiterable(x):  return not isinstance(x, basestring) and isinstance(x, collections.Iterable)

编辑* :正如评论中指出的那样,问题集中在一个对象是否是迭代器上,而不是它是否可迭代***(所有迭代器都是可迭代的,但反之则不行-
并非所有的迭代器都是迭代器)。

isinstance(x, collections.Iterator)
是专门检查该状况的完全相似的方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/623768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号