迭代器和类型检查

时间:2013-09-24 07:47:33

标签: python types

如何在此类代码中确定第i个元素类型:

for i in some_iterable:
    if type(i) is some_class:
        print "foobar"

它当前没有工作,因为我希望i的类型作为迭代器而不是存储在下面的实际值返回。

5 个答案:

答案 0 :(得分:3)

使用isinstance()内置函数http://docs.python.org/2/library/functions.html#isinstance

完成在python中检查类型

像这样:

>>> isinstance('a',basestring)
True
>>> isinstance(['a'],list)
True

答案 1 :(得分:3)

你应该使用isintance(i,someclass)

>>> class C(object):
 pass

>>> class D(C):
 pass
>>> type(C) == C
False
>>> type(C()) == C
True
>>> type(D()) == C
False
>>> isinstance(C(),C)
True
>>> isinstance(D(),C)
True

答案 2 :(得分:3)

您确定可迭代的内容/结构吗?因为这个例子适合我:

strings_and_nums = ['a', 1, 'b', 2, 'c']

for element in strings_and_nums:
    if type(element) is str:
        print "String"
    else:
        print "Something else"
# Output:
String
Something else
String
Something else
String

答案 3 :(得分:2)

这是执行此操作的方法,isinstance(i,someclass)

答案 4 :(得分:2)

据我所知,你一点也不清楚,i是一个可迭代的,你想检查它产生的类型。

首先需要获得一个值:

v = next(i)

然后你应该把它放回去:

from itertools import chain

i = chain([v], i)

然后您可以对isinstance进行v检查:

isinstance(v, sometype)
是吗?


请注意,如果iterable的长度为0,则无法确定其类型。但是你可以阻止它破坏:

try:
    v = next(i)

except StopIteration:
    what_to_do_if_no_elements()

else:
    i = chain([v], i)
    if isinstance(v, sometype):
        ...