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 13 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python连接phoenix的方法示例
Sep 29 Python
Django如何防止定时任务并发浅析
May 14 Python
PyQt5显示GIF图片的方法
Jun 17 Python
python修改字典键(key)的方法
Aug 05 Python
python输出pdf文档的实例
Feb 13 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
Python数据分析入门之教你怎么搭建环境
May 13 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/09/27 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP 断点续传实例详解
2017/11/11 PHP
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
Python实现简单过滤文本段的方法
2017/05/24 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
如何一键升级Python所有包
2020/11/05 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
酷瑞网络科技面试题
2012/03/30 面试题
千元咖啡店的创业计划书范文
2013/12/29 职场文书
问卷调查计划书
2014/01/10 职场文书
材料员岗位职责
2014/03/13 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
白鹤梁导游词
2015/02/06 职场文书
学生通报表扬范文
2015/05/04 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL