python中字符串比较使用is、==和cmp()总结


Posted in Python onMarch 18, 2018

经常写 shell 脚本知道,字符串判断可以用 =,!= 数字的判断是 -eq,-ne 等,但是 Python 确不是这样子的。

所以作为慢慢要转换到用 Python 写脚本,这些基本的东西必须要掌握到骨子里!

在 Python 中比较字符串最好是使用简单逻辑操作符。

例如,确定一个字符串是否和另外一个字符串匹配。正确的,你可以使用 is equal 或 == 操作符。你也可以使用例如 >= 或 < 来确定几个字符串的排列顺序。

从官方文档上看

The operators ``is`` and ``is not`` test for object identity: ``x is
y`` is true if and only if *x* and *y* are the same object. ``x is
not y`` yields the inverse truth value.
 
cmp(...)
 cmp(x, y) -> integer
 
 Return negative if x<y, zero if x==y, positive if x>y.

也就是说 is 用来判断是否是同一个对象,is 是种很特殊的语法,你在其它的语言应该不会见到这样的用法。

python is 主要是判断 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 吗?

因为 string pooling (或叫intern)。 is 相等代表两个对象的 id 相同(从底层来看的话,可以看作引用同一块内存区域)。 至于为什么 “ABC” 被 intern 了而 “a bc” 没有,这是 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()
 
#print firstline
 
#if strtmp == firstline:
s = (strtmp is firstline)
print s
if (strtmp is firstline):
 print 'yes'
else:
 print 'no'

来个简单点的例子:

#-*-conding:utf-8-*-
i='xinwen';
m=input();
if i==m:
 print('yes');
else:
 print('no');
 
input();

在 if 判断语句中非常有用呐!

#!/usr/bin/python
# Filename: if.py
 
number = 23
guess = int(raw_input('Enter an integer : '))
 
if guess == number:
 print 'Congratulations, you guessed it.' # New block starts here
 print "(but you do not win any prizes!)" # New block ends here
elif guess < number:
 print 'No, it is a little higher than that' # Another block
 # You can do whatever you want in a block ...
else:
 print 'No, it is a little lower than that'
 # you must have guess > number to reach here
 
print 'Done'
# This last statement is always executed, after the if statement is executed

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'
>>> a is b
True
>>> id(a) == id(b)
True
>>>

可以看出内容相同的字符串实际上是同一个对象(Java 中直接赋值的字符串也可用 == 来判断,但是使用 new 实例化的对象则需要使用equals(String s) 来判断)。

以上几个例子大家应该可以明白在python中字符串比较使用is、==和cmp()的方法了

Python 相关文章推荐
Python的一些用法分享
Oct 07 Python
python使用socket远程连接错误处理方法
Apr 29 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
python实现停车管理系统
Nov 30 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
如何在python中写hive脚本
Nov 08 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
Python turtle画图库&amp;&amp;画姓名实例
Jan 19 Python
方法汇总:Python 安装第三方库常用
Apr 26 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 #Python
Python zip()函数用法实例分析
Mar 17 #Python
Python iter()函数用法实例分析
Mar 17 #Python
Python callable()函数用法实例分析
Mar 17 #Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 #Python
python中matplotlib的颜色及线条控制的示例
Mar 16 #Python
Python lambda函数基本用法实例分析
Mar 16 #Python
You might like
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
Angularjs修改密码的实例代码
2017/05/26 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
python实现linux下使用xcopy的方法
2015/06/28 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
在Python中增加和插入元素的示例
2018/11/01 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
会计实习自我鉴定
2013/12/04 职场文书
给校长的一封建议书
2014/03/12 职场文书
户外活动策划方案
2014/03/12 职场文书
工人先锋号申报材料
2014/12/29 职场文书
工作经验交流材料
2014/12/30 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书