当方法中的 运行 时,内置 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'>
我是 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'>