猿问

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

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

有没有类似的方法isiterable?到目前为止我找到的唯一解决办法就是打电话

hasattr(myObj, '__iter__')

但我不知道这有多蠢。


有只小跳蛙
浏览 746回答 3
3回答

呼唤远方

检查__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

鸭型try: &nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;iter(theElement)except&nbsp;TypeError: &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;not&nbsp;iterableelse: &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;iterable#&nbsp;for&nbsp;obj&nbsp;in&nbsp;iterator:#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass类型检查使用抽象基类..它们至少需要Python2.6,并且只适用于新样式的类。from&nbsp;collections.abc&nbsp;import&nbsp;Iterable&nbsp;&nbsp;&nbsp;#&nbsp;import&nbsp;directly&nbsp;from&nbsp;collections&nbsp;for&nbsp;Python&nbsp;<&nbsp;3.3if&nbsp;isinstance(theElement,&nbsp;Iterable): &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;iterableelse: &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;not&nbsp;iterable然而,iter()是否更可靠,如所述通过文件:检查isinstance(obj, Iterable)检测注册为Iterable或具有__iter__()方法,但它不会检测到使用__getitem__()方法。确定对象是否可迭代的唯一可靠方法是调用iter(obj).
随时随地看视频慕课网APP

相关分类

Python
我要回答