说完常用的数据类型,再来说下运算符。运算符用于将各种类型的数据进行运算,让静态的数据跑起来。

编程语言中的运算大致分为以下几个大类:

  • 算术运算, 用于加减乘除等数学运算
  • 赋值运算,用于接收运算符或方法调用返回的结果
  • 比较运算, 用于做大小或等值比较运算
  • 逻辑运算,用于做 与、或、非运算
  • 位运算, 用于二进制运算

每种运算中所包含的符号称为相应的运算符,如 算术运算符、比较运算符等。

一、算术运算


运算(符) 说明 实例
+ 两个对象相加 2 + 3 结果为 5
- 两个对象相减 3 - 2 结果为 1
* 两个数相乘或返回一个重复若干次的序列 2 * 3 结果为 6; 'abc' * 2 结果为 'abcabc'
/ 两个数相除 3 / 2 结果为 1.5
// 整除,返回商的整数部分 3 // 2 结果为 1,3 // 2.0 结果为 1.0
% 求余/取模,返回除法的余数 3 % 2 结果为 1,3 % 2.0 结果为 1.0
** 求幂/次方 2 ** 3 结果为 8

二、赋值运算


运算(符) 描述 实例
= 简单赋值运算符 a = 5, b = 3, c = a - b
+= 加法赋值运算符 a += b 相当于 a = a + b
-= 减法赋值运算符 a -= b 相当于 a = a -b
*= 乘法赋值运算符 a = b 相当于 a = a b
/= 除法赋值运算符 a /= b 相当于 a = a / b
//= 取整除赋值运算符 a //= b 相当于 a = a // b
%= 取模赋值运算符 a %= b 相当于 a = a % b
**= 幂赋值运算符符 a = b 相当于 a = a b

三、比较运算


Python有8中比较操作,它们具有相同的优先级。比较操作可以被任意连接,比如 x< y <= z 等同于 x < y and y <= z,只是第一种形式下的y只被评估一次。另外,当 x < y不成立时,这两种形式下的z都不会被评估。

运算(符) 说明 实例
< 严格小于 3 < 5 结果为True,5 < 5 结果为False
<= 小于或等于 3 <= 5 结果为True,5 <= 5 结果为True
> 严格大于 5 > 3 结果为True,5 > 5 结果为False
>= 大于或等于 5 >= 3 结果为True,5 >= 5 结果为True
== 等于 1 == 1.0 == True 结果为True
!= 不等于
is 判断两个标识符是否引用自一个对象 x is y, 如果id(x) == id(y),即x也y的指向同一个内存地址,则结果为1,否则结果为0
is not 判断两个标识符是否引用自不同对象 x is not y, 如果id(x) != id(y),即x和y指向不同的内存地址,则结果为1,否则结果为0

说明:

a) 不同类型的对象进行比较,从来不会相等(不同的数字类型除外);

b) 当把<、<=、> 和 >=操作符在这几种情况下会抛出TypeError异常: (1) 用于复数和另外的内置数字类型进行比较时;(2) 比较的对象为不同类型,无法进行比较时;(3) 未定义的其他情况下;

c) 一个类的不同实例通常是不相等的,除非该类定义了__eq__()方法;

d) 一个类的实例不能相对于同一类或其他类的的其他实例进行排序,除非该类定义了足够的方法__lt__(), __le__(), __gt__(), __ge__()。如果想要比较运算符的常规含义, __lt__()和__eq__()就足够了;

e) is 和 is not操作符的行为是不能自定义的;另外,它们可以被应用到两个不同类型的对象,不会已发异常。

f) 另外两个具有相同句法优先级的操作是 in 和 not in,它们支持序列、集合和映射类型的对象。

g) 比较运算的结果为布尔值:True 或 False

四、逻辑运算


“真”值测试(Truth Value Testing)

在讲解“布尔运算”之前,我们先来说下Python中的一个特殊操作--“真”值测试。

Python中的任何一个对象都可以被测试“真”值。这里说的“真”值测试可以这样理解:Python中的任何一个对象都可以转换为一个布尔值,而这个“真”值测试就是获取一个对象对应的布尔值的过程。

Python中只有下面这些值对应的布尔值为False:

  • None
  • False
  • 数字类型中的0,如:0, 0.0, 0j
  • 任意空序列,如:'', (), []
  • 任意一个空映射,如:{}
  • 一个用户自定义类的实例--该用户自定义类中定义了一个__bool__()或__len__()方法,且实例调用该方法时返回整数0或布尔值False

除此之外,所有的其它值对应的布尔值都是True, 因此许多类型的对象永远是True。

"真"值测试可以被用在 if或while条件中,也可以作为布尔操作的操作数。

布尔运算(Boolean Operations)

Python中的逻辑运算称为“布尔运算(Boolean Operations)”,操作符包括:and(与)、or(或)、not(非)。

下面按照他们的优先级升序顺序进行说明:

运算 结果
x or y 如果x的Truth值测试结果为False,那么该操作的结果为y的值,否则为x的值
x and y 如果x的Truth值测试结果为False, 那么该操作的结果为x的值,否则为y的值
not x 如果x的Truth值测试结果为False, 那么该操作的结果为True,否则结果为False

说明:

a)or是一个短路操作符,也就是说,只有第一个参数的评估结果为False时,第二个参数才会被评估;

b) and也是一个短路操作符,也就是说,只有第一个参数的评估结果为True时,第二个参数才会被评估;

c) not操作符比非布尔操作符优先级低,因此,not a == b 被解释为 not (a == b);如果写成 a == not b会包语法错误。

五、位运算


按位运算是指把数字转换为二进制来进行计算,位运算符包括以下几种:

假设:

a = 60,对应的二进制格式为 0011 1100

b = 13, 对应的二进制格式为 0000 1101

运算符 说明 实例
& 按位与:参与运算的两个值,如果相应的二进制位都为1,则该位结果为1,否则为0 a & b 对应的二进制结果为 0000 1100,十进制为12
竖杠 按位或:参与运算的两个值,只要对应的二进制位由一个为1时,该位结果就为1 a 竖杠 b 对应的二进制结果为 0011 1101,十进制为61
^ 按位异或:参与运算的两个值,当对应的二进制位不同时,该为结果为1,否则改为结果为0 a ^ b 对应的二进制结果为 0011 0001, 十进制为49
~ 按位取反:这个是单目运算符,只有一个值参与运算,运算过程是对每个二进制位取反,即把1变0,把0变1 ~a 的二进制结果为 1100 0011,十进制数为-61
<< 左移运算符:运算数的各二进制位全部左移若干位,高位丢弃,低位补0,结果相当于运算数乘以2的n次方,正负符号不发生改变 a << 2 的二进制结果为 1111 0000,十进制数为240
>> 右移运算符:运算数的各二进制位全部右移若干位,结果相当于运算数除以2的n次方,正负符号不发生改变 a >> 2 的二进制结果为 0000 1111,十进制为15

Python中的运算符的更多相关文章

  1. 【Python】 解析Python中的运算符

    Python中的运算符相比较于传统的C/C++差别不是很大,主要是一些个别的运算符上的差别.包括:算术.比较.赋值.位.逻辑.成员.身份等.它们的优先级: 符号 说明 ** 指数(最高优先级) ~,+ ...

  2. 【转】Python中的运算符

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

  3. python中的运算符及表达式及常用内置函数

    知识内容: 1.运算符与表达式 2.for\while初步了解 3.常用内置函数 一.运算符与表达式 python与其他语言一样支持大多数算数运算符.关系运算符.逻辑运算符以及位运算符,并且有和大多数 ...

  4. 带你一文了解Python中的运算符

    运算符 目标 算数运算符 比较(关系)运算符 逻辑运算符 赋值运算符 运算符的优先级 数学符号表链接:https://zh.wikipedia.org/wiki/数学符号表 01. 算数运算符 是完成 ...

  5. python中的运算符归类

    运算符 目标 算数运算符 比较(关系)运算符 逻辑运算符 赋值运算符 成员运算符 运算符的优先级 数学符号表链接:https://zh.wikipedia.org/wiki/数学符号表 01. 算数运 ...

  6. Python中的运算符与表达式

    你所编写的大多数语句(逻辑行)都包含了表达式(Expressions).一个表达式的简单例子便是 2+3.表达式可以拆分成运算符(Operators)与操作数(Operands).运算符(Operat ...

  7. Python 中的运算符重载

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...

  8. Java与Python中的‘%’运算符意义一样么?

    1. 取余与取模 百度百科对于取模运算做了如下定义: 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = [a/b]; 2.计算模或者余数: r = a - c*b. 求 ...

  9. Python中比较运算符连用的语法规则

    在Python中,比较运用符<.>.<=.>=.== .!=可以连用,但语法规则和其它编程语言不一样 以 == 为例,具体语法规则是: a == b == c == d 等价于 ...

随机推荐

  1. 那年有关 return ; 的一切

    现在只知道在dev C++里面声明了函数的返回类型不为void就不能写return; ,但是如果返回值为void就可以写return; ,而且如你所愿.

  2. 解决VS2010子目录中的.cpp文件引用上一级目录的stdafx.h找不到定义的问题

    Source目录 |-- stdafx.h |--Util目录 |--Util.h |--Util.cpp 现在的发现Util.cpp各种变量的定义全是红色波浪线,找不到定义,但是却能够编译过 问题就 ...

  3. TSP旅行商问题的Hopfield求解过程

      连续型Hopfield在matlab中没有直接的工具箱,所以我们们根据Hopfield给出的连续行算法自行编写程序.本文中,以求解旅行商 问题来建立Hopfield网络,并得到解,但是该解不一定是 ...

  4. [Leetcode][JAVA] Minimum Window Substring

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  5. ubuntu下面mysql,通过载入txt文件初始化数据表

    环境:ubuntu12.04   mysql(通过apt安装) (1)根据数据表中的属性列,对应在txt中构造记录(一行对应一条记录),不同属性之间通过tab键(以/root目录下构建的init.tx ...

  6. 绿色ip扫描工具

    ip扫描,可以扫描一下自己的局域网有多少设备在线,有没有在蹭网.优点在于:短小精悍,快速,不用安装. 其实,我自己也写过一个但是没有这个精致,感兴趣的可以一起讨论. 下载地址:32位 64位 我的淘宝 ...

  7. Python成长笔记 - 基础篇 (七)python面向对象

      三大特性: 1.封装:在类中对数据赋值.内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法 2.继承:一个类可以派生出子类,在父类中定义的属性.方法会自动被子类继承 ...

  8. install skype4.3 in ubuntu15.04

    Canonical Partners repository finally adds support for Ubuntu 15.04. Here’s how to enable the reposi ...

  9. redis/php redis扩展 安装

    作者:silenceper 日期:2013-10-03 原文地址: http://silenceper.com/archives/952.html 我是在CentOS 6.3 中进行的. 使用到的软件 ...

  10. C语言结构体-struct

    知识点: 1)结构体的定义. 2)结构体的sizeof. 3)  结构体的指针. 1) 结构体的定义: 在逻辑上有一定关联的多个数据类型做为一整体进行操作的数据结构,它的关键字是struct.下面我将 ...