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 09 Python
详解在Python的Django框架中创建模板库的方法
Jul 20 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
python django 实现验证码的功能实例代码
May 18 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
微信公众号token验证失败解决方案
Jul 22 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
python异常处理try except过程解析
Feb 03 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
Django设置Postgresql的操作
May 14 Python
python 如何上传包到pypi
Dec 24 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
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
查看Django和flask版本的方法
2018/05/14 Python
Python下简易的单例模式详解
2019/04/08 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
python实现双人五子棋(终端版)
2020/12/30 Python
环保专项行动方案
2014/05/12 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
大专护理专业自荐信
2015/03/25 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
利用Redis实现点赞功能的示例代码
2022/06/28 Redis