在方法中运行时,内置类型()函数行为会有所不同

时间:2017-12-18 17:35:17

标签: python python-3.5

我对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;?

感谢。

3 个答案:

答案 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'>