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正则表达式匹配中文用法示例
Jan 17 Python
python中子类调用父类函数的方法示例
Aug 18 Python
python爬虫之urllib3的使用示例
Jul 09 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
Python Cookie 读取和保存方法
Dec 28 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
关于python中remove的一些坑小结
Jan 04 Python
Python实现生活常识解答机器人
Jun 28 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
javascript json2 使用方法
2010/03/16 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
台湾生鲜宅配:大口市集
2017/10/14 全球购物
如何保障Web服务器安全
2014/05/05 面试题
司机辞职报告范文
2014/01/20 职场文书
幼儿园新年寄语
2014/04/03 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
四风对照检查材料范文
2014/09/27 职场文书
捐助倡议书
2015/01/19 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
利用python调用摄像头的实例分析
2021/06/07 Python