我对Python很新,我不理解这种行为:
In [62]: a = "string"
In [63]: type(a)
Out[63]: str
In [64]: def some_method(what):
var = type(what)
if var == "str":
print("it is str")
else:
print("it's NOT str")
print("Val of passed arg is - ", what, "And 'var' is - ", var)
In [65]: some_method(a)
it's NOT str
Val of passed arg is - string And 'var' is - <class 'str'>
任何人都可以解释为什么变量&#34; var&#34;有一个值&#34; class&#39; str&#39;&#34;,
而不是它在ipython3 RAPL中的显示方式 - &#34; str&#34;?
感谢。
答案 0 :(得分:4)
不,它没有。在这两种情况下,类型都不等于字符串"str"
。它等于类型 str
。
在任何情况下,要检查某些内容是否为字符串,您应该再次使用isinstance
和实际的类型对象。
if isinstance(var, str):
print("it is str")
答案 1 :(得分:3)
您正在将变量的类型与字符串进行比较,而不是与类型进行比较。只需删除if子句中的引号:
>>> a = "string"
>>> type(a)
<class 'str'>
>>> type(a) == str
True
>>> type(a) == "str"
False
答案 2 :(得分:3)
这只是IPython的展示方式。 str
不等于'str'
:
In [14]: type(a) == "str"
Out[14]: False
IPython定义了自己的displayhook
,它会向您显示结果,原始的displayhook
(在sys.__displayhook__
中找到)明确了这一点:
In [15]: sys.__displayhook__(type(''))
<class 'str'>