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实现冒泡,插入,选择排序简单实例
Aug 18 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python类的动态修改的实例方法
Mar 24 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
值得收藏的10道python 面试题
Apr 15 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
python -v 报错问题的解决方法
Sep 15 Python
利用python进行数据加载
Jun 20 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 一个比较完善的简单文件上传
2010/03/25 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
javascript multibox 全选
2009/03/22 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
Python字符遍历的艺术
2008/09/06 Python
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
python模块导入的细节详解
2018/12/10 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
平安工地汇报材料
2014/08/19 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
2016年情人节问候语
2015/11/11 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript