如何确定此类代码中的第 i 个元素类型:
for i in some_iterable:
if type(i) is some_class:
print "foobar"
它目前无法正常工作,因为我期望 i 的类型作为迭代器返回,而不是存储在下面的实际值。
你确定你的迭代的内容/结构吗?因为这个例子对我来说很好:
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
在 python 中检查类型是使用isinstance()
内置函数完成的:http: //docs.python.org/2/library/functions.html#isinstance
像这样:
>>> isinstance('a',basestring)
True
>>> isinstance(['a'],list)
True
你应该使用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
据我所知,你一点也不清楚,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):
...
这就是这样做的方法,isinstance(i,someclass)