简明Python3教程 7.运算符和表达式
简介
你写的大多数逻辑行都包含表达式。表达式的一个简单例子是2 + 3。一个表达式可分为操作符和操作数两部分。
操作符的功能是执行一项任务;操作符可由一个符号或关键字代表,如+ 。操作符需要数据以供执行其功能,这些数据名为操作数。在上面的例子中,2和3是操作数。
操作符
我们在这里简单地介绍操作符及其用途:
你可在Python解释器中交互验证下面给出的例子。例如,验证2 + 3,在Python解释器提示符中输入:
>>> 2 + 3
5
>>> 3 * 5
15
>>>
|
操作符 |
名称 |
用途 |
举例 |
|---|---|---|---|
|
+ |
加 |
使两操作数相加 |
3 + 5 得到 8. 'a' + 'b' 得到 'ab'. |
|
- |
减 |
求出前后两数之差。若第一个操作数未写则默认为0。 |
-5.2 得道一个负数, 50 - 24得到26。 |
|
* |
乘 |
得出两数乘积或返回重复若干次的字符串。 |
2 * 3得到6。'la' * 3得到'lalala'. |
|
** |
幂 |
返回x的y次幂。 |
3 ** 4得到81 ( 3 * 3 * 3 * 3) |
|
/ |
除 |
将x除以y。 |
4 / 3 得到 1.3333333333333333。 |
|
// |
取整除 |
返回最大的整数商。 |
4 // 3 得到 1。 |
|
% |
取模 |
返回余数。 |
8% 3 得到2。 -25.5% 2.25得到1.5. |
|
<< |
左位移 |
将操作数向左移动若干bit位。(数字在内存中以二进制表示) |
2 << 2 得到 8。 2在二进制中表示为10 。左位移两bit位后得到1000,十进制中表示为8。 |
|
>> |
右位移 |
将操作数向右移动若干bit位。 |
11 >> 1得到5, 11二进制下表示为1011,右位移一位后得到101,十进制中表示为5。 |
|
& |
按位与 |
数的按位与。 |
5 & 3 得到 1。 |
|
| |
按位或 |
数的按位或。 |
5 | 3得到7。 |
|
^ |
按位异或 |
数的按位异或。 |
5 ^ 3得到6。 |
|
~ |
按位翻转 |
x的按位翻转是-(x+1)。 |
~5得到-6。 |
|
< |
小于 |
返回x是否小于y。所有比较运算符返回布尔值True或False。请注意布尔值大小心敏感。 |
5 < 3得到False,3 < 5得到True. 比较运算符可任意连接,如3 < 5 < 7得到True. |
|
> |
大于 |
返回x是否大于y。 |
5 > 3 得到True。如果两个操作符都是数字,解释器会将其转换到同一类型后再比较。若否则返回False。 |
|
<= |
小于等于 |
返回x是否小于等于y。 |
x = 3; y = 6; x <= y返回True。 |
|
>= |
大于等于 |
返回x是否大于等于y。 |
x = 4; y = 3; x >= 3得到True。 |
|
== |
等于 |
比较两操作数是否相等。 |
x = 2; y = 2; x == y得到True。 x = 'str'; y = 'stR'; x == y得到False。 x = 'str'; y = 'str'; x == y得到True。 |
|
!= |
不等于 |
比较两操作数是否不相等。 |
x = 2; y = 3; x!= y得到True。 |
|
not |
布尔非 |
若X为True则返回False,反之亦然。 |
x = True; not x返回False。 |
|
and |
布尔与 |
无论y值为何,若X为False则x and y 返回False。 |
x = False; y = True; x and y由于x为False返回False。此例中Python因为已知and左值为False而不会计算整个布尔表达式,这是短路求值法。 |
|
or |
布尔或 |
若x为True则返回True,否则返回y的布尔值。 |
x = True; y = False; x or y返回True。布尔或同样使用短路求值。 |
数学运算与赋值捷径
对一个变量进行运算后再赋值给其自身是常见的,因此对于此类表达式有对应捷径:
你可将:
a = 2; a = a * 3
写成:
a = 2; a *= 3
注意:变量 = 变量 操作符 表达式变为了变量 操作符= 表达式
运算顺序
如果你遇到了类似2 + 3 * 4的表达式,首先做加法还是乘法?先做乘法,高中数学如是说。这意味着乘法运算符比加法运算符有更高的优先级。
下表中以从低到高的顺序给出了Python中操作符优先级列表。给定一个表达式,Python将会首先计算在此表中靠下的操作符与表达式,然后计算靠上的操作符与表达式。
此表取自Python reference manual,包括了所有的运算符。建议使用圆括号标注具有较高优先级的部分,这可使程序更可读。详情请看改变计算顺序。
|
操作符 |
描述 |
|---|---|
|
lambda |
Lambda表达式 |
|
or |
布尔或 |
|
and |
布尔与 |
|
not x |
布尔非 |
|
in, not in |
成员测试 |
|
is, is not |
同一性测试 |
|
<, <=, >, >=,!=, == |
比较运算符 |
|
| |
按位或 |
|
^ |
按位异或 |
|
& |
按位与 |
|
<<, >> |
位移 |
|
+, - |
加减 |
|
*, /, //, % |
乘除、取整除、取余 |
|
+x, -x |
正负 |
|
~x |
按位非 |
|
** |
幂 |
|
x.attribute |
属性引用 |
|
x[index] |
下标 |
|
x[index1:index2] |
寻址段 |
|
f(arguments …) |
函数调用 |
|
(expressions, …) |
显示绑定或元组 |
|
[expressions, ...] |
显示列表 |
|
{key:datum, …} |
显示字典 |
表中仍未接触到的运算符将会在后续章节中说明。
拥有相同优先级的运算符位于上表的同一行中,例如+和-拥有相同优先级。
改变计算顺序
使用括号可增加表达式可读性。例如2 + (3 * 4)就比需要运算符优先级知识的2 + 3 * 4更好理解。但是仍要避免过量使用括号,例如(2 + (3 * 4))。
使用括号还可以改变运算顺序,例如在(2 + 3) * 4中括号使表达式先进行加法运算后进行乘法运算。
结合律
操作符在优先级相同的情况下从左向右计算,例如2 + 3 + 4等价于(2 + 3) + 4。另一些运算符如赋值运算符从右向左计算,例如a = b = c等价于a = (b = c)。
表达式
例子:
#!/usr/bin/python
# Filename: expression.py length = 5
breadth = 2 area = length * breadth
print('Area is', area)
print('Perimeter is', 2 * (length + breadth))
输出:
$ python expression.py
Area is 10
Perimeter is 14
工作原理:
矩形的长与宽存储在同名变量中。我们通过计算面积与周长的表达式得出这两个值。我们将表达式length * breadth的值存储在变量area中,并使用print函数打印变量值。在第二种情况中,我们直接使用print函数打印表达式2 * (length + breadth)的值。
另外即便我们没有专门在'Area is'与变量area中加入空格,Python仍美观地打印出了此输出。Python自动为我们生成了一个漂亮的输出格式并因此令程序更可读:我们不需要担心输出字符串中的空格。这是另一个Python简化程序员工作的例子。
总结
我们了解了书写任何程序都需要的砖块:操作符、操作数和表达式。下一步我们将了解如何在程序中使用这三者。
简明Python3教程 7.运算符和表达式的更多相关文章
- 简明Python3教程(A Byte of Python 3)
关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程 简明 ...
- 简明Python3教程 17.更多
简介 迄今为止我们已经学习了python中的大多数常用知识.本章中我们会接触到更多的知识,使得我们更全面的掌握python. 传递元组 你是否希望过从函数返回两个不同的值?做到这点使用元组即可. &g ...
- 简明Python3教程 18.下一步是什么
如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...
- 简明Python3教程 16.标准库
简介 python标准库作为python标准安装的一部分,其自身包含数量庞大的实用模块, 因此熟悉python标准库非常重要,因为很多问题都能利用python标准库快速解决. 下面我们将研究标准库中的 ...
- 简明Python3教程 12.问题解决
我们已经探究了python语言的方方面面,现在我们将通过设计编写一个有用的程序将这些内容有机的结合起来. 主要目标是让大家有能力独自编写程序. 问题 我们要解决的问题是”希望编写一个程序,用于创建所有 ...
- 简明Python3教程 11.数据结构
简介 数据结构基本上就是 – 可以将一些数据结合到一起的结构,换言之用于存储一组相关的数据. python拥有4种内建数据结构 – 列表,元组(tuple),字典和集合. 我们将看到如何它们,它们又是 ...
- 简明Python3教程 9.函数
简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...
- 简明Python3教程 6.基础
你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...
- 简明Python3教程 5.第一步
介绍 我们现在来看看如何在Python中运行传统的”Hello world”程序.这会教你如何写.保存以及运行Python程序. 有两种办法来运行您的Python程序——使用交互式的解释器提示符或者源 ...
随机推荐
- POJ 3641 Oulipo KMP 水题
http://poj.org/problem?id=3461 直接KMP就好.水题 #include<cstdio> #include<cstring> const int M ...
- ZOJ 3171 The Hidden 7's DP
传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3203 题目大意给定一串字符串,需要计算出seven的个数. #incl ...
- 【例题5-1 UVA 10474 】Where is the Marble?
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排序 用lower_bound找就可以了. ->lower_bound,如果里面所有的数字都比x小,那么它的返回值会越界! [ ...
- 【BZOJ 3675】[Apio2014]序列分割
[链接] 链接 [题意] 在这里输入题意 [题解] 模拟一下样例. 会发现.切的顺序不影响最后的答案. 只要切点确定了. 答案就确定了. 则设f[i][j]表示前i段,第i段保留到j的最大值. \(f ...
- [ES7] Await multi promises sequentially or concurrently
Somtime 'async await' can have a bad effect on code proferemence. Let's take a look the below exampl ...
- Android Wear之android穿戴式设备应用开发平台
Android Wear于2014年03月19日公布,并有Moto 360和LG watch两款产品. 眼下源代码还没有开放.可是开发人员能够下载它的Image及相应的开发SDK,这样开发人员通过模拟 ...
- Python 标准库 —— glob
glob库是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用 windows 下的文件搜索差不多.查找文件只用到三个匹配符: "*", 匹配 0 个或多个 ...
- dmalloc用法快速入门
原文链接 常用内存泄露检测手段有 1 mtrace 2 memwatch 3 mpatrol 4 dmalloc 5 dbgmem 6 valgrind 7 Electric Fence dmallo ...
- ArcEngine 数据导入经验(转载)
转自原文ArcEngine 数据导入经验(转载) (一) GIS系统数据是基础,想必大家在做ArcEngine二次开发的过程中都会遇到向MDB和SDE写入数据的工作,我们将会通过几个篇幅,从大数据量导 ...
- Thinking in UML 学习笔记(四)——UML核心视图之活动图
在UML中活动图的本质就是流程图,它描述了为了完成某一个目标需要做的活动以及这些互动的执行顺序.UML中有两个层面的活动图,一种用于描述用例场景,另一种用于描述对象交互. 活动图只是我们用来描述业务目 ...