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调用C/C++动态链接库的方法详解
Jul 22 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
Tensorflow限制CPU个数实例
Feb 06 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
Python实现曲线拟合的最小二乘法
Feb 19 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
javascript与cookie 的问题详解
2013/11/11 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
联想台湾官网:Lenovo TW
2018/05/09 全球购物
销售总监工作职责
2013/11/21 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
培训讲师岗位职责
2014/04/13 职场文书
厕所文明标语
2014/06/11 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
质量保证书怎么写
2015/02/27 职场文书
党内外群众意见范文
2015/06/02 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫