当方法中的 运行 时,内置 type() 函数的行为有所不同

Build in type() function behaviour differs when run in method

我是 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'>

谁能解释为什么变量 "var" 的值为 "class 'str'"、

而不是 ipython3 RAPL 中的显示方式 - "str"?

谢谢。

您正在将变量类型与字符串而不是类型进行比较。只需将引号放在您的 if 子句中:

>>> a = "string"
>>> type(a)
<class 'str'>
>>> type(a) == str
True
>>> type(a) == "str"
False

不,不是。在这两种情况下,类型都不等于字符串 "str"。它等于 type str.

无论如何,要检查某物是否为字符串,您应该使用 isinstance,再次使用实际类型对象。

if isinstance(var, str):
    print("it is str")

这只是 IPython 的展示方式。 str 不等于 'str':

In [14]: type(a) == "str"
Out[14]: False

IPython 定义了它自己的 displayhook 向您显示结果,原始 displayhook(在 sys.__displayhook__ 中找到)清楚地表明:

In [15]: sys.__displayhook__(type(''))
<class 'str'>