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中处理列表之reverse()方法的使用教程
May 21 Python
python编程开发之日期操作实例分析
Nov 13 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
django项目中新增app的2种实现方法
Apr 01 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
Django如何实现密码错误报错提醒
Sep 04 Python
如何在vscode中安装python库的方法步骤
Jan 06 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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
TypeScript入门-接口
2017/03/30 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
Django models.py应用实现过程详解
2019/07/29 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
车贷收入证明范本
2014/01/09 职场文书
办公设备采购方案
2014/03/16 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
接待员岗位职责
2015/02/13 职场文书
学生会辞职信
2015/03/02 职场文书
教导主任个人总结
2015/03/03 职场文书
对公司的意见和建议
2015/06/04 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
python playwright之元素定位示例详解
2022/07/23 Python