python操作符_Python基础手册6——操作符

下面为Python所有的操作符表达式(摘自Mark Lutz的《Python学习手册》)。

41dbbdb11bf1

当编写含有一个操作符以上的表达式时,Python将按照所谓的优先级法则对其进行分组,这个分组决定了表达式各部分的计算顺序。表中的操作符越靠后的优先级越高,位于同一行的表达式在组合的时候通常从左到右组合(除了幂运算,它是从右向左组合的,还有比较运算,是从左到右连接的)。

当使用括号划分子表达式的时候,就会超越Python的优先级规则。Python总会先执行计算括号中的表达式,然后再将结果用在整个表达式中。

所有的Python操作符可以通过Python的类或C扩展类型被重载(即实现),让它也能工作于你所创建的对象中。Python自身自动重载了某些操作符,能够根据所处理的内置对象的类型而执行不同的操作。这种特性通常称作多态。

下面介绍常用的操作符,其中一些常用于某些类型的操作符,会在后续的介绍对应类型的章节中详细介绍。

一、赋值运算符

1、 赋值运算符(=)

Python 语言中, 等号( = )是主要的赋值运算符,其他的是增量赋值运算符。

赋值并不是直接将一个值赋给一个变量, 尽管你可能根据其它语言编程经验认为应该如此。在 Python 语言中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量(具体原理下面会有详细介绍)。

同样的, 如果你比较熟悉 C, 你会知道赋值语句被当成一个表达式(可以返回值)。不过这条并不适合于 Python,Python 的赋值语句不会返回值。

类似下面的语句在 Python 中是非法的:

41dbbdb11bf1

链式赋值没问题:

41dbbdb11bf1

2、 增量赋值

等号可以和一个算术运算符组合在一起, 将计算结果重新赋值给左边的变量,这被称为增量赋值。

41dbbdb11bf1

增量赋值运算符:

41dbbdb11bf1

增量赋值相对普通赋值不仅仅是写法上的改变,最有意义的变化是第一个对象(我们例子中的 x)仅被处理一次。如果值是可变对象会被就地修改(无修拷贝引用), 如果值是不可变对象则和 x = x + 1 的结果一样(x会被分配一个新对象:2)。

注意:Python 不支持 C 语言中的自增 ++和自减 -- 运算符, 这是因为 + 和 - 也是单目运算符,Python 会将 --n 解释为-(-n) 从而得到 n,同样 ++n 的结果也是 n。

3、 多重赋值

41dbbdb11bf1

在上面的例子中,一个值为 1 的整数对象被创建,该对象的同一个引用被赋值给 x、y 和 z 。也就是将一个对象赋给了多个变量。在 Python 当中,将多个对象赋给多个变量也是可以的。

4、“多元”赋值

另一种将多个变量同时赋值的方法我们称为多元赋值(multuple)。采用这种方式赋值时, 等号两边的对象都是元组。

41dbbdb11bf1

在上面的例子里, 两个整数对象(值分别为 1 和 2)及一个字符串对象, 被分别赋值给x,y 和 z。通常元组需要用圆括号(小括号)括起来,尽管它们是可选的。我们建议总是加上圆括号以使得你的代码有更高的可读性。

41dbbdb11bf1

在其它类似 C 的语言中, 如果你要交换两个值, 你会想到使用一个临时变量比如 tmp 来临时保存其中一个值:

41dbbdb11bf1

在上面的 C 代码片段中,变量 x 和变量 y 的值被互相交换。 临时变量 tmp 用于在将 y 赋值给 x 前先保存 x 的值。将 y 的值赋给 x 之后, 才可以将保存在 tmp 变量中的 x 的值赋给 y。Python 的多元赋值方式可以实现无需中间变量交换两个变量的值。

41dbbdb11bf1

二、算数运算符

41dbbdb11bf1

加、减、乘、除和取余都是标准运算符。Python 有两种除法运算符,单斜杠用作传统除法(和数学中的除法一样),双斜杠用作地板除(取比商小的最大整数)。还有一个乘方运算符, 双星号(**)。

41dbbdb11bf1

就象你看到的: + 和 - 优先级最低, *, /, //, %优先级较高, 单目运算符 + 和 - 优先级更高, 乘方的优先级最高。(3 ** 2) 首先求值, 然后是 (-2 * 4), 然后是对两个结果进行求和。建议对于复杂的运算表达式使用小括号()来限制运算顺序,以使代码更清晰,同时避免错误。

下面总结了所有的算术运算符, 从上到下, 计算优先级依次降低:

41dbbdb11bf1

注意: ** 运算符优先级高于单目运算符

X / Y

传统除法(真除法),无论任何类型都会返回包含任何余数的一个浮点结果。

X // Y

Floor除法,这个操作会取传统除法的结果之下的最接近的整数,针对整数操作会返回整数,如果有任何一个操作数是浮点数,则返回一个浮点数。其直接效果就是向下舍入,并不是严格的截断。

41dbbdb11bf1

41dbbdb11bf1

三、比较运算符

比较运算符用来判断同类型对象是否相等,所有的内建类型均支持比较运算,比较运算返回布尔值 True 或 False。

41dbbdb11bf1

实际进行的比较运算因类型而异。换言之,数字类型根据数值的大小和符号比较,字符串按照字符序列值进行比较,等等。

注意: Python 目前支持两种“不等于”比较运算符, != 和 <> , 分别是 C 风格和 ABC/Pascal风格。目前后者慢慢地被淘汰了, 所以我们推荐使用前者 !=。

四、逻辑运算符

逻辑运算符 and 和 or 会判断表达式中两侧对象的布尔值,并返回一个真或者假的操作对象(并非布尔值)。如果单从bool性考虑:and 运算符只有在两侧对象都为真时,表达式才为真,否则只有有一侧对象为假,表达式就为假;or运算符只有在两侧对象都为假时,表达式才为假,否则只要有一侧对象为真,表达式就为真。

41dbbdb11bf1

41dbbdb11bf1

当然,我们还可以使用逻辑运算符 and 和 or 将任意表达式连接在一起,并得到一个布尔值:

41dbbdb11bf1

最后表达式返回的是bool值,这是因为比较和相等测试会返回True或False。

在进行and 和 or 的运算时,Python 解释器会从左至右的运算操作对象的bool值,当运算为and时,解释器会返回第一个为假的操作对象(可以得到结果),如果两侧操作数都为真,则返回最右侧的对象。当运算为or是,解释器会返回第一个为真的对象(可以得到结果),如果两侧 操作数都为假,则返回最右侧的对象。

41dbbdb11bf1

not 运算符拥有最高优先级,只比所有比较运算符低一级。 and 和 or 运算符则相应的再低一级。not会返回对象的bool值的对立bool值。

41dbbdb11bf1

注意: 合理使用括号可以增强代码的可读性, 没用括号的话,可能会使程序得到错误结果,或使代码可读性降低。括号在 Python语言中不是必须存在的, 不过为了可读性, 使用括号总是值得的。

五、位运算符

Python 整数 支持标准位运算:取反(~),按位 与(&), 或(|) 及 异或(^) 及左移(<<)和右移(>>)。

Python 这样处理位运算:

负数会被当成正数的 2 进制补码处理。

左移和右移 N 位等同于无溢出检查的 2 的 N 次幂运算: 2**N。

对长整数来说, 位运算符使用一种经修改的 2 进制补码形式,使得符号位可以无限的

[图片上传中...(7.png-962a19-1515381258065-0)]

向左扩展。

取反(~)运算的优先级与数字单目运算符相同, 是所有位操作符中优先级最高的一个。 左移和右移运算的优先级次之,但低于加减法运算。与, 或, 异或 运算优先级最低。

所有位运算符按优先级高低列在下图中:

41dbbdb11bf1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值