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的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
python编程开发之textwrap文本样式处理技巧
Nov 13 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
python使用RNN实现文本分类
May 24 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
Python print不能立即打印的解决方式
Feb 19 Python
Python使用xlrd实现读取合并单元格
Jul 09 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实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
JavaScript多线程详解
2015/08/12 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
python基础教程之字典操作详解
2014/03/25 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python探索之创建二叉树
2017/10/25 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
Python基于execjs运行js过程解析
2020/11/27 Python
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
通息工程毕业生自荐信
2013/10/16 职场文书
员工薪酬激励方案
2014/06/13 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
大学体育课感想
2015/08/10 职场文书
七年级语文教学反思
2016/03/03 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
Python 全局空间和局部空间
2022/04/06 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android