2010-01-17 65 views
3
import string 
print string.ascii_lowercase # abcdefghijklmnopqrstuvwxyz 
print type(string.ascii_lowercase) # <type 'str'> 
print string.ascii_lowercase is str # False 

是不是应该是True如何在Python中测试对象的类型?

+0

哪个版本的Python? – 2010-01-17 15:03:54

+0

Python版本2.6.1 – 3zzy 2010-01-17 15:05:47

回答

4

is运算符比较两个对象的标识。这是什么,我相信它在幕后:

id(string.ascii_lowercase) == id(str) 

实际字符串总是会比类型str不同的身份,所以这将永远是False

下面是测试的东西是否是一个字符串的最Python的方式:

isinstance(string.ascii_lowercase, basestring) 

这将同时匹配strunicode字符串。

+0

感谢id()例子,现在就明白了! :) – 3zzy 2010-01-17 15:31:19

2

string.ascii_lowercase is str不应该是True

type(string.ascii_lowercase) is strTrue

is关键字检查对象标识,而不是类型。

您可能已经看到类似foo is None这样的代码,并认为None是一种类型。 None实际上是一个单身物件。

+0

哦,为什么不呢?我必须知道的任何技术原因? – 3zzy 2010-01-17 15:07:09

+0

,因为'string.ascii_lowercase'是一个字符串,而'str'是一个类型。 – Skilldrick 2010-01-17 15:08:45

+1

'是'测试是否它们是同一个对象。即它们都是指向对象的指针,这些对象是否相同。 – 2010-01-17 15:09:16

3

使用:

>>> isinstance('dfab', str) 
True 

is用于身份鉴定。

+0

+1 http://docs.python.org/library/functions.html?highlight=isinstance#isinstance“如果对象参数是classinfo参数的实例或(直接或间接)子类的实例,则返回true它们的“。 – artlung 2010-01-17 15:18:37

0

你不想要type(string.ascii_lowercase) is str

相关问题