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系列之数据处理编程实例(二)
May 22 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
Python内置函数OCT详解
Nov 09 Python
Python线程指南详细介绍
Jan 05 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
keras的ImageDataGenerator和flow()的用法说明
Jul 03 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
粗暴解决CUDA out of memory的问题
May 22 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生成文件
2007/01/15 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
js函数调用的方式
2014/05/06 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
深入理解Python装饰器
2016/07/27 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python字符串的方法与操作大全
2018/01/30 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
python实现单链表的方法示例
2019/09/03 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
工程造价管理专业大专生求职信
2013/10/06 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
火灾现场处置方案
2014/05/28 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
2015年司机工作总结
2015/04/23 职场文书
村党组织公开承诺书
2015/04/30 职场文书
冰雪公主观后感
2015/06/16 职场文书