擅长:python、mysql、java
<p>在python 2.x中,检查<code>__iter__</code>属性是有帮助的(尽管并不总是明智的),因为iterables应该有这个属性,但是字符串没有。</p>
<pre><code>def typecheck(obj): return hasattr(myObj, '__iter__')
</code></pre>
<p>缺点是<code>__iter__</code>不是一种真正的python方法:例如,有些对象可能实现<code>__getitem__</code>,但不是<code>__iter__</code>。</p>
<p>在Python 3.x中,strings得到了<code>__iter__</code>属性,从而破坏了这个方法。</p>
<p>您所列出的方法是Python 3.x中我所知道的最有效的、真正的Python方法:</p>
<pre><code>def typecheck(obj): return not isinstance(obj, str) and isinstance(obj, Iterable)
</code></pre>
<p>有一种更快(更有效)的方法,就是像Python 2.x那样检查<code>__iter__</code>,然后检查<code>str</code>。</p>
<pre><code>def typecheck(obj): return hasattr(obj, '__iter__') and not isinstance(obj, str)
</code></pre>
<p>这与Python2.x中的警告相同,但速度要快得多。</p>