等值、大小比较

在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较。关键词:内置类型、同类型。所以,两个对象如果类型不同,就没法比较,比如数值类型的数值不能和字符串类型的数值或字母比较。

对于python中的等值、不等值、大小比较的规则为何如此,以后学了Class的运算符重载,自然就会知道。

其实自定义的类型(python 3.x中类Class就是类型)也可以进行比较,只不过要对类的比较操作符进行运算符重载。这些以后再说,这里先看内置类型的比较。

比较操作符有:

==  !=  <  <=  >  >=

例如,下面的比较全部返回True。

bool(1 < 2)
bool('a' < 'c')
bool('A' < 'a') # 字符大小:A < Z < a < z bool([1,2,2] < [1,2,3])
bool((1,2,2) < (1,2,3))
bool({1,2,2} < {1,2,3})

python中同类型的内置类型对象(字典除外),都是从左开始,一个一个元素向后比较,就算中间遇到嵌套的容器结构(如list/tuple/Set),也会递归到嵌套的结构中去一个个比较。

>>> bool([1,2,[3,3]] < [1,2,[3,4]])
True

注意,None对象只能参与等值和不等值比较,不能参与大小比较。

>>> None == None
True
>>> None != None
False
>>> None <= None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<=' not supported between instances of 'NoneType' and 'NoneType'

python支持连续比较,连续比较时等价于使用and运算。例如:

a < b < c    等价于  a < b and b < c
a < b > c 等价于 a < b and b > c
a == b < c 等价于 a == b and b < c

一定要注意连续比较时的逻辑。例如1 == 2 < 3 返回False,但它等价于 1 == 2 and 2 < 3,而不是先评估1==2得到False,再将比较的结果与后面的做比较,即等价于False < 3,这意味着0<3,这实际上是返回True的。

>>> 1 == 2 < 3
False >>> (1==2) < 3
True

连续比较是一种比较语法,它不仅限于数值的连续比较,还支持其它类型。比如:

>>> "ac" > "ab" < "ad"
True

is 和 ==

有两种比较数据对象是否相等的方式:"=="和"is",它们的否定形式分别为"!="和"is not"。

它们都是比较表达式,但却是完全不同的比较方式:

  • " =="和"!="符号比较的是数据的值是否相等、相同
  • "is"比较的是两个数据对象在内存中是否是同一个数据对象。换句话说,比较的是内存地址

    等号比较很容易理解,只要值相等就为True,否则为False。

is比较的是内存中的数据对象。例如:

>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False

a和b在数值上是相等的,所以a == b返回True。但它们分别指向的内存中的数据对象1000,却不是同一个数据对象,所以a is b返回False。如下图,内存中有两个1000。



如果是下面这种情况:

>>> a = 1000
>>> b = a
>>> a is b
True

结果中a is b返回True,因为b = a是将a中保存的1000的地址赋值给b,使得b中也保存1000地地址。如下图,内存中只有一个1000,但是a和b都指向这个1000。



is测试还有些特殊情况,另外,关于b = a为什么赋值的是a中保存的地址,这里不对此展开描述

对python中等值和大小比较的更多相关文章

  1. 「Python实用秘技05」在Python中妙用短路机制

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第5期 ...

  2. python等值和大小比较

    等值.大小比较 在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较.关键词:内置类型.同类型.所以,两个对象如果类型不同,就没法比较,比如数值类型的数值 ...

  3. python中对列表元素大小排序(冒泡排序法和选择排序法)

    前言:排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的两种排序算法,选择排序法 ...

  4. python数据结构-如何根据字典中值的大小对字典项排序

    如何根据字典中值的大小对字典项排序 问题举例 某班英语成绩以字典形式存储,如何根据成绩高低,计算学生成绩排名 { “tom”:80, "lily":88, "marton ...

  5. Python中的运算符

    说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 赋值运算,用于接收运算符或方法 ...

  6. 【转】Python中的运算符

    [转]Python中的运算符 说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 ...

  7. 详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...

  8. python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)

    最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...

  9. 关于Python中的文件操作(转)

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

随机推荐

  1. injected stylesheet 谷歌扩展插件,造成样式异常

    今天在开发的时候,遇到一个问题,就是我们我在写发送广告的功能,然后我用了一个textare文本框,这个时候,发现了一个问题.这个文本框凭空消失了.不见了,我以为是自己的那个样式不小心把这个隐藏掉了后来 ...

  2. CROSS-ENV不同环境配置

    项目背景 为了适应h5环境搭建需求,需要动态配置开发,测试,生产三种对应域名及其及打包命令.使用cross-env可以让配置环境更加清晰明了还好管理. 简介 cross-env的作用是不需要全局配置N ...

  3. Mac 安装nginx之后重启、停止、开启等操作

    操作系统:macOs High Sierra 10.13.6 1.我用的homebrew安装的nignx1.15.9,安装完成之后会有下面的提示: 网站根目录在:/usr/local/var/www ...

  4. CentOS 磁盘在线扩容

    场景介绍: 操作系统Centos7.x 系统有一块vdisk,容量为20G,共分为3个区(swap和boot分区为标准分区xfs文件系统,根分区为LVM分区,xfs文件系统) 业务需求:在VM系统不关 ...

  5. ubuntu下安装tomcat,shutdown时报错:./catalina.sh:1:eval:/home/xxx/jdk/jre/bin/java:not found

    该问题可能导致tomcat启动成功了,但是浏览器输入http://127.0.0.1:8080无法显示tomcat的欢迎界面 打开Tomcat安装目录下的bin文件下的setclasspath.sh, ...

  6. Appium(六):元素定位

    1. 元素定位 对于自动化测试来说,核心技能就是对象的定位了.不管是web页面上的按钮或输入框,还是移动app上的一个按钮或输入框,我们要想对其进行点击或输入操作,前提是要先找到这个对象. webdr ...

  7. React每隔0.2s颜色变淡 之生命周期 ,componentDidMount表示组件已经挂载

    05案例 每隔0.2s颜色变淡 componentDidMount表示组件已经挂载,可以进行DOM操作 import React, { Component } from "react&quo ...

  8. linux常用命令补充

    linux补充 apt 是在我们Linux系统安装软件 pip 用来安装python3的模块(第三方库)  ps # 查看运行进程(pid) ps aux # 查看全部任务进程 top # 也可以查看 ...

  9. 在ubuntu18.04上使用OpenSSL生成自签名认证基本流程

    为了使系统支持https模式,首先我们要使能ssl模式. 命令如下: sudo a2enmod ssl sudo systemctl restart apache2 接下来我们要生成一个SSL/TLS ...

  10. 一起学Spring之AOP

    概述 在软件开发中,我们重点关注的是业务逻辑代码,但在实际开发中,需要写的代码却不仅仅是业务逻辑,还需要处理记录日志,异常处理,事务控制等一些与业务无关的事情.而且这些代码也是服务端必须的,类似这样的 ...