我试图用is比较两个字符串。一个字符串由函数返回,另一个字符串则在比较中声明。是测试对象标识的,但是根据this page,由于Python的内存优化,它还可以处理两个相同的字符串。但是,以下方法不起作用:
def uSplit(ustring):
#return user minus host
return ustring.split('!',1)[0]
user = uSplit('theuser!host')
print type(user)
print user
if user is 'theuser':
print 'ok'
else:
print 'failed'
user = 'theuser'
if user is 'theuser':
print 'ok'
输出:
^{pr2}$我猜这是因为函数返回的字符串与字符串文本的“类型”不同。有没有办法让一个函数返回字符串文字?我知道我可以用==,但我只是好奇。在
你引用的那一页写着“如果两个字符串相等,它们就被放在同一个内存位置”(emphasis mine)。Python提供文本字符串,但是从某个任意函数返回的字符串是单独的对象。
is
运算符可以看作是指针比较,因此两个不同的对象不会进行相同的比较(即使它们包含相同的字符,也就是说它们是相等的)。在您遇到的事实是Python并不总是对它的所有字符串进行内接。更多详情请参阅:
http://mail.python.org/pipermail/tutor/2009-July/070157.html
你引用的网站是这样写的:
但是
不是字符串文本,而是对文本
'theuser!host'
进行操作的结果。在总之,通常不应该使用
is
检查字符串是否相等,因为这种内存优化在任何情况下都只是一个不应该依赖的实现细节。在另外,您应该使用
is
来表示is None
。使用它检查您设计的类的两个对象是否是同一个实例。你不能很容易地将它用于字符串或数字,因为创建这些内置类的规则很复杂。有些弦被截住了。同样,一些数字也被拘留了。在相关问题 更多 >
编程相关推荐