python中字符串比较使用is、==和cmp()总结
经常写shell脚本知道,字符串判断可以用=,!=数字的判断是-eq,-ne等,但是Python确不是这样子的。
所以作为慢慢要转换到用Python写脚本,这些基本的东西必须要掌握到骨子里!
在Python中比较字符串最好是使用简单逻辑操作符。
例如,确定一个字符串是否和另外一个字符串匹配。正确的,你可以使用isequal或==操作符。你也可以使用例如>=或<来确定几个字符串的排列顺序。
从官方文档上看
Theoperators``is``and``isnot``testforobjectidentity:``xis y``istrueifandonlyif*x*and*y*arethesameobject.``xis noty``yieldstheinversetruthvalue. cmp(...) cmp(x,y)->integer Returnnegativeifxy.
也就是说is用来判断是否是同一个对象,is是种很特殊的语法,你在其它的语言应该不会见到这样的用法。
pythonis主要是判断2个变量是否引用的是同一个对象,如果是的话,则返回true,否则返回false。
判断数字相等不要用is操作符
>>>a=256 >>>b=256 >>>id(a) 9987148 >>>id(b) 9987148 >>>a=257 >>>b=257 >>>id(a) 11662816 >>>id(b) 11662828
为什么两次is返回的是不同结果?不是应该都是true吗?
因为stringpooling(或叫intern)。is相等代表两个对象的id相同(从底层来看的话,可以看作引用同一块内存区域)。至于为什么“ABC”被intern了而“abc”没有,这是Python解析器实现决定的,可能会变。
==用来判断两个对象的值是否相等(跟Java不同,Java中==用来判断是否是同一个对象)。
今天我用==来判断两个IP地址字符串是否相同。
#!/usr/bin/python strtmp='192.169.1.161' file_object=open(r'public_ip.txt') try: all_the_text=file_object.readlines() firstline=all_the_text[0].rstrip() finally: file_object.close() #printfirstline #ifstrtmp==firstline: s=(strtmpisfirstline) prints if(strtmpisfirstline): print'yes' else: print'no'
来个简单点的例子:
#-*-conding:utf-8-*-
i='xinwen';
m=input();
ifi==m:
print('yes');
else:
print('no');
input();
在if判断语句中非常有用呐!
#!/usr/bin/python
#Filename:if.py
number=23
guess=int(raw_input('Enteraninteger:'))
ifguess==number:
print'Congratulations,youguessedit.'#Newblockstartshere
print"(butyoudonotwinanyprizes!)"#Newblockendshere
elifguessnumbertoreachhere
print'Done'
#Thislaststatementisalwaysexecuted,aftertheifstatementisexecuted
cmp()函数则是相当于<,==,>但是在Python3中,cmp()函数被移除了,所以我以后还是避免少用这个函数。
>>>x='a'
>>>x+'b'is'ab'
False
>>>x+'b'=='ab'
True
>>>cmp(x+'b','ab')
0
>>>id(x+'b')
32468384L
>>>id('ab')
46933696L
>>>
注意:
>>>a='abc' >>>b='abc' >>>aisb True >>>id(a)==id(b) True >>>
可以看出内容相同的字符串实际上是同一个对象(Java中直接赋值的字符串也可用==来判断,但是使用new实例化的对象则需要使用equals(Strings)来判断)。
以上几个例子大家应该可以明白在python中字符串比较使用is、==和cmp()的方法了