0

我发现在带有 Python 2.5.5 的 Debian 上,该collections模块没有Iterable类。

示例: http: //python.codepad.org/PxLHuRFx

使用 Python 2.5.6 在 OS X 10.8 上执行的相同代码可以正常工作,因此我认为由于某种原因缺少此代码。

我必须让我的代码在所有 Python 2.5+ 上通过什么解决方法?

4

2 回答 2

4

我会检查对象是否__iter__定义了函数。

所以hasattr(myObj, '__iter__')

于 2012-11-19T17:57:45.607 回答
0

这有效:

def f(): pass
import sys  
results={'iterable':[],'not iterable':[]}

def isiterable(obj):
    try:
        it=iter(obj)
        return True
    except TypeError:
        return False


for el in ['abcd',[1,2,3],{'a':1,'b':2},(1,2,3),2,f,sys, lambda x: x,set([1,2]),True]:
    if isiterable(el):
        results['iterable'].append('\t{}, a Python {}\n'.format(el,type(el).__name__))
    else:   
        results['not iterable'].append('\t{}, a Python {}\n'.format(el,type(el).__name__))

print 'Interable:'
print ''.join(results['iterable'])

print 'Not Interable:'
print ''.join(results['not iterable'])

印刷:

Interable:
    abcd, a Python str
    [1, 2, 3], a Python list
    {'a': 1, 'b': 2}, a Python dict
    (1, 2, 3), a Python tuple
    set([1, 2]), a Python set

Not Interable:
    2, a Python int
    <function f at 0x100492d70>, a Python function
    <module 'sys' (built-in)>, a Python module
    <function <lambda> at 0x100492b90>, a Python function
    True, a Python bool

这在这个 SO 帖子中得到了更充分的探讨。

于 2012-11-20T17:06:37.410 回答