'is' in Python
在Python中应该避免将“is”运算符用于比较 像“数值”和“字符串”这种不可变的值。由于Python内部操作这些对象的方式,使得对这些对象使用“is”运算符的结果将是不可预测的。
下面以两个例子加以说明:
# DEMO 1:
x = y = [1, 2, 3]
z = [1, 2, 3] print("'x == y' gets ", x == y)
print("'x == z' gets ", x == z) print("'x is y' gets ", x is y)
print("'x is z' gets ", x is z) # DEMO 2:
a = b = 'hello'
c = 'hello' print("'a == b' gets ", a == b)
print("'a == c' gets ", a == c) print("'a is b' gets ", a is b)
print("'a is c' gets ", a is c)
DEMO 1的结果没有问题:
'x == y' gets True
'x == z' gets True
'x is y' gets True
'x is z' gets False
对于DEMO 2的结果:
'a == b' gets True
'a == c' gets True
'a is b' gets True
'a is c' gets True
对于DEMO 2的结果,我们能够理解出现这一结果的原因('hello'是一个字符串常量并且不可改变的,当定义第二个
字符串常量时,由于其与第一个常量值相同,所以 Python不会再次申请一段空间用于存储这一字符串常量--因为这个字符
串常量不会改变,而是直接使用前面已经定义过的字符串常量;因此后来定义的c和先前定义的a,b其实都是同一对象)。
但是,这和我们使用is的本意可能并不一致,所以,在Python中应该避免将“is”运算符用于比较 像“数值”和“字符串”
这种不可变的值。
'is' in Python的更多相关文章
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- python开发编译器
引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...
- 关于解决python线上问题的几种有效技术
工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...
随机推荐
- Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap
Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap 1.1. 虚拟机的构成 java虚拟机--处理器.堆栈.寄存器.指令系统. 1 1.2. 虚拟机执行过程 ...
- 基于Virtext6平台的GTX IP核基本设置说明
本工程基于以下条件使用: 板卡:DBF板v3.0 芯片型号:Virtex6 315T ISE版本:14.7 IP核版本: v6_gtxwizard : 1.12 一.IP核配置进行流程 第一页配置:线 ...
- HashMap之原理及死锁
一.HashMap原理 1.HashMap的本质就是数组和链表.table是一个entry数组,每一个数组元素保存一个Entry节点,而Entry节点内部又连接着同样key的下一个Entry节点,就构 ...
- codeblocks中给GCC编译器加参数
在使用gcc命令行编译的时候可以使用gcc xxx.c -o xxx.exe -std=c99来使用c99标准编译 但是在codeblocks中默认是不使用c99标准编译的,如何加参数呢? Setti ...
- nc在centos7上的安装和简单使用
下载 http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm rpm -iUv nc-1.84-22. ...
- 基于GitLab的前端Assets发布体系
以SVN+RMS为核心的发布系统,对前端开发的影响上来看,存在以下问题: 覆盖式的发布,容易导致线上问题. js一旦发布,就有可能被任意其他页面使用.被引用的越多,就越重要.一旦核心js出现故障,影响 ...
- linux服务器宕机分析/性能瓶颈分析
linux服务器宕机分析/性能瓶颈分析 服务器宕机原因很多,资源不足.应用.硬件.系统内核bug等,以下一个小例子 服务器宕机了,首先得知道服务器宕机的时间点,然后分析日志查找原因 1.last ...
- 【转】如何彻底删除SVN中的文件和文件夹(附恢复方法)
这里假设SVN项目的目录为 /data/svn/project,我们想排除trunk/test.exe文件和trunk/notallowed/目录,操作步骤如下及执行的svn命令(在svn安装目录的b ...
- 根据分辨率改变宽度 demo
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- php 按条件进行计算的方法
$isin = in_array($sheng,$s_sheng);//post过来的省的编码是否在s_sheng(自定义的数组)里,如果在,则加一,如果不在则不加一 if($isin){ //ech ...