import string
print string.ascii_lowercase # abcdefghijklmnopqrstuvwxyz
print type(string.ascii_lowercase) # <type 'str'>
print string.ascii_lowercase is str # False
是不是应该是True
?如何在Python中测试对象的类型?
import string
print string.ascii_lowercase # abcdefghijklmnopqrstuvwxyz
print type(string.ascii_lowercase) # <type 'str'>
print string.ascii_lowercase is str # False
是不是应该是True
?如何在Python中测试对象的类型?
is
运算符比较两个对象的标识。这是什么,我相信它在幕后:
id(string.ascii_lowercase) == id(str)
实际字符串总是会比类型str
不同的身份,所以这将永远是False
。
下面是测试的东西是否是一个字符串的最Python的方式:
isinstance(string.ascii_lowercase, basestring)
这将同时匹配str
和unicode
字符串。
感谢id()例子,现在就明白了! :) – 3zzy 2010-01-17 15:31:19
string.ascii_lowercase is str
不应该是True
。
type(string.ascii_lowercase) is str
是True
。
is
关键字检查对象标识,而不是类型。
您可能已经看到类似foo is None
这样的代码,并认为None
是一种类型。 None
实际上是一个单身物件。
哦,为什么不呢?我必须知道的任何技术原因? – 3zzy 2010-01-17 15:07:09
,因为'string.ascii_lowercase'是一个字符串,而'str'是一个类型。 – Skilldrick 2010-01-17 15:08:45
'是'测试是否它们是同一个对象。即它们都是指向对象的指针,这些对象是否相同。 – 2010-01-17 15:09:16
使用:
>>> isinstance('dfab', str)
True
is
用于身份鉴定。
+1 http://docs.python.org/library/functions.html?highlight=isinstance#isinstance“如果对象参数是classinfo参数的实例或(直接或间接)子类的实例,则返回true它们的“。 – artlung 2010-01-17 15:18:37
你不想要type(string.ascii_lowercase) is str
?
哪个版本的Python? – 2010-01-17 15:03:54
Python版本2.6.1 – 3zzy 2010-01-17 15:05:47