如何在此类代码中确定第i个元素类型:
for i in some_iterable:
if type(i) is some_class:
print "foobar"
它当前没有工作,因为我希望i的类型作为迭代器而不是存储在下面的实际值返回。
答案 0 :(得分:3)
使用isinstance()
内置函数http://docs.python.org/2/library/functions.html#isinstance
像这样:
>>> 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):
...