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程序中的运用
Mar 02 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
代码分析Python地图坐标转换
Feb 08 Python
Python实现的求解最大公约数算法示例
May 03 Python
Python 2.7中文显示与处理方法
Jul 16 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
python try except 捕获所有异常的实例
Oct 18 Python
python列表list保留顺序去重的实例
Dec 14 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
Python3.10的一些新特性原理分析
Sep 15 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 构造函数construct的前下划线是双的_
2009/12/08 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript数组去掉重复
2011/05/12 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
django输出html内容的实例
2018/05/27 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python 进程的几种创建方式详解
2019/08/29 Python
python函数定义和调用过程详解
2020/02/09 Python
详解python metaclass(元类)
2020/08/13 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
《藏戏》教学反思
2014/02/11 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
中秋节随笔
2015/08/15 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js