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实现的解析crontab配置文件代码
Jun 30 Python
python基础教程之常用运算符
Aug 29 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
在Python中使用元类的教程
Apr 28 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
pyenv命令管理多个Python版本
Mar 26 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
python3实现域名查询和whois查询功能
Jun 21 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
Django REST framwork的权限验证实例
Apr 02 Python
python实现取余操作的简单实例
Aug 16 Python
详解Python调用系统命令的六种方法
Jan 28 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设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
nodejs基础应用
2017/02/03 NodeJs
jQuery实现可编辑的表格
2019/12/11 jQuery
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
Python import与from import使用及区别介绍
2018/09/06 Python
python实现桌面壁纸切换功能
2019/01/21 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
户外活动策划方案
2014/03/12 职场文书
抽奖活动主持词
2014/03/31 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
美丽心灵观后感
2015/06/01 职场文书
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle