编程的本质就是数据和运算,数据由基本数据类型、数据结构来表示,运算就是对这些数据的各种操作,基本的加减乘除、是非判断、流程控制等等。这些操作就是今天我们要讲的运算符、表达式和语句。

前面我们学习Python的基本语法时,讲到了Python程序的

的概念,这个行再细分就是运算符(Operators)、运算对象(Operands)、表达式(Express)、语句(Statements)。

提示:运算和操作这两个概念在编程中往往是一样的

比如下面这一行代码:

a = 5; b = a + 7; c = a if a > b else b

先来分解一下这一行:

语句: 由表达式组成。此例共三条语句,用分号

;

分开,即一个物理行有三个逻辑行;

表达式: 由运算符和操作对象组成。此例中的表达式有

a + 7

,

a > b

等;

运算对象: 即各种对象。此例中的

a, b, c, 5, 7

等。

用一行表示它们的关系就是:

运算对象 + 运算符 -> 表达式 -> 语句

运算对象和运算符构成表达式,表达式构成语句

运算对象

运算对象就是由各种对象构成的集合,这些对象里面有些是

常量

,有些是

变量

常量

Python中的常量我们已经见过很多了,比如整数:

9, 7, 8

等等,浮点数:

3.14, 0.618

等等,字符串:

'猿人学Python'

,这些常量我们看到它们时就知道它们的意思,这就是字面意义上的常量。

字面意义上的常量就是按照它们的

字面意义

使用它们的值。比如,数字

8

总是代表它自己,它是一个常量,不能改变它的值。

变量

常量代表具有特定意义的对象,但不足以满足编程的需要。编程经常需要一种既可以存储数据有可以对它进行运算(操作)的东东,这个东东就是

变量

。编程中要经常使用变量,就需要给变量起个名字:变量名。变量名的起名规则就是前面讲Python基本语法时提到的

标识符

,忘了的小猿可以再去看看那一节。

最开始那一行Python代码中的

a, b, c

都是变量,而

5, 12, 5

就是它们各自存储的值。如果再来一句

a = a + 3

a

的值就变成了

8

,变量

a

的值就变了。

变量的赋值就是给变量一个值,比如

a = 3

,就是给a变量以3的值。

a = 3 # 把3赋值给a,此时a的值为3

b = a # 把a赋值给b,此时b的值等于a的值,也是3

c, d = a, b # 这是多重赋值,相当于 c = a; d = b

运算符

运算符就是对运算对象进行的具体运算名称。不同的运算符代表不同的运算,比如加减乘除。

通过Python shell可以方便的体验运算符的使用:

In [115]: 2 + 5

Out[115]: 7

In [116]: 8 * 9

Out[116]: 72

下面我们用一个表格来清晰的列出各种运算符及其用法。

运算符

名称

含义

示例

+

两个对象相加

2 + 5

得7;

'猿人学' + 'Python'

得到

'猿人学Python'

-

两数相减,或负数

10 - 5

得到5;

-3.1

表示负数。

*

两数相乘,或字符串重复多次

3 * 7

得到21;

'py' * 2

得到

pypy

**

返回x的y次幂

2**8

得256;

2.3**3

得12.167

/

两数相除

10 / 2

得到5;

10 / 3

得到 3.333333

//

向下取整除

两数相除,返回离商最近且小的整数。如果除数和被除数中有浮点数,返回的也是浮点数。

11 // 2

得到5;

-11 // 2

得到-6;

5 // 1.34

得到3.0.

%

模除

求余数

10 % 3

得到1;

10 % 3.3

得到0.1;

-10 % 3.3

得到3.2,因为

-10 // 3.3

得 -4,

-10 - 3.3*-4

得到3.2.

<<

左移

二进制操作,把数字的每个比特位向左移动特定位数(数字在内存中以二进制

0,1

表示)

2 << 3

得到16,

2

的二进制是:

00000010

,左移3位变成:

0b00010000

即16

>>

右移

把一个数的比特位向右移动特定位数

2 >> 1

得到1

&

位与

两数对应的比特位进行与操作

8 & 9

得8

`

`

位或

两数对应的比特位进行或操作

`8

9`得9

^

位异或

两数对应的比特位进行异或操作

8^9

得1

位反

一个数x的比特位全部取反,值为-(x+1)

~8

的 -9

<

小于

返回x是否小于y。所有比较运算符返回的不是

True

就是

False

8 < 9

得到

True

>

大于

返回x是否大于y

8 > 9

得到

False

<=

小于等于

返回x是否小于等于y

x = 2; y = 3; x <= y

返回

True

>=

大于等于

返回x是否大于等于y

x = 6; y = 4; x >= y

返回

True

==

等于

比较对象是否相等

2 == 2

返回

True

3 == 2

返回

False

'str' == 'str'

返回

True

!=

不等于比较对象是否不相等

1 != 3

返回

True

3 != 3

返回False

not

布尔

如果x是

True

则返回

False

;如果x是

False

则返回

True

x = False; not x

返回

True

and

布尔

x and y

如果x是

False

则返回

False

,否则返回y的布尔值

x = False; y = True; x and y

返回

False

,因为x是False。这种情况下,Python不再检验y的布尔值,因为and左边的x已经是False了,不管右边的y是真是假都不影响整个表达式的值,所以就不再去验证y是真是假。这叫做“短路求值”。

or

布尔

如果x是

True

则返回True,否则返回y的布尔值

x = True; y = False; x or y

返回True。这里同样适用“短路求值”

运算符优先级(Operator precedence)

小时候学数学的时候,我们知道先乘除后加减,比如要算

2 + 5 * 6

的话,先算

5 * 6

得到30, 再算

2 + 30

得到32. 也就是说,乘法运算符的优先级高于加法运算符。

下面的表格就是Python的运算符的优先级,从低到高排列,同一个单元格里面的运算符具有相同的优先级,这时候运算顺序从左到右。不过,还是建议大家通过使用圆括号来分组表达式(运算符和运算对象),这样可以清楚的指出运算的先后顺序,同时也让程序更加易读。

运算符

描述

lambda

Lambda函数表达式

if-else

条件表达式

or

布尔或

and

布尔与

not

布尔非

in

,

not in

,

is

,

is not

,

<

,

<=

,

>

,

>=

,

!=

,

==

比较,包括成员测试和同一性测试

`

`

位或

^

位异或

&

位与

<<

,

>>

移位

+

,

-

加、减

*

,

@

,

/

,

//

,

%

乘,矩阵乘法,除,向下取整除,模除

+x

,

-x

,

~x

整数,负数,位非(位反)

**

幂运算符。它的绑定不如其右侧的算数或按位一元运算符紧密,所以,

2**-1

的值是0.5.

await

await表达式(asyncio中使用)

x[index]

,

x[index:index]

,

x(arguments...)

,

x.attribute

下标,切片,函数调用,属性引用

(expressions...)

,

[expressions...]

,

{key:value...}

,

{expressions...}

绑定或元组显示,列表显示,字典显示,集合显示

上面表格中有我们还没有接触到的运算符,这将会在后面的章节中讲解。

程序根据上表的顺序来进行运算,但是我们也可以通过圆括号来改变它们的计算顺序,比如

(2 + 7) * 3

中,就先计算圆括号里面的加法,然后再进行乘法。这个原则跟小学时学到的算术是一样的。

表达式(Expression)

表达式是一段可以计算为某个值的语法片段。换句话说,就是表达元素的累积,比如文字,名称,属性访问,运算符或函数调用,它们都返回一个值。与许多其它语言相比,并非所有语言结构都是表达式。还有一些语句不能用作表达式,比如

while

赋值

也是语句,但不是表达式。

从上面对表达式的定义来看,

a > 3

是表达式,

a = 3

不是表达式,而是赋值语句。

语句(Statements)

语句是程序段(一个代码“块”)的组成单位。一条语句可以是一个表达式或某个带有关键字的结构,例如

if

,

while

for

语句的例子:

a = 5 # 赋值语句

if a > 3: #条件语句,其中 a > 3是表达式

print('a > 3') #输出语句

总结

程序由语句组成;语句或是由表达式构成,或是赋值,或是

if

,

while

等关键字的结构;表达式由运算符和运算对象(数字、字符串等常量,变量等)组成,是语句的构成元素。

python基本对象_python基础教程:运算对象、运算符、表达式和语句相关推荐

  1. python expect模块_Python基础教程:用Python怎么telnet到网络设备

    Python基础教程:用Python怎么telnet到网络设备 0.前言 Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但 ...

  2. cpython python 区别面试_python基础教程之千万不要错过这几道Python面试题

    第1题: python下多线程的限制以及多进程中传递参数的方式? python多线程有个全局解释器锁(global interpreter lock),简称GIL,这个GIL并不是python的特性, ...

  3. python 包用法_Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 这篇文章主要介绍了 Python 基础教程之包和类的用法的相关资料, 需要的朋友可以参考下 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido ...

  4. python 字符串替换_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  5. python 英语教学_Python基础教程(英文视频教学)

    Python基础教程 -.1.-.Installing_Python_video.flv: http://www.t00y.com/file/10034879 -.2.-.Numbers_and_Ma ...

  6. python 去除str的引号 去除括号_Python基础教程:运算符以及数据类型解析

    运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...

  7. python创建文件对象_python基础教程:文件读写

    在Linux系统中,一切都是文件.但我们通常说的文件是保存在磁盘上的图片.文档.数据.程序等等.而在程序的IO操作中,很多时候就是从磁盘读写文件.本节我们讲解Python中的文件对象如何操作文件. 创 ...

  8. python数字类型及运算_Python基础教程:运算符以及数据类型解析

    运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...

  9. python dict下标_Python基础教程:python的数据类型

    python基础之五大标准数据类型 学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个黑框框中输出一个"你好,世界"并没有什么了不起,要看透事物的本质,熟悉 ...

最新文章

  1. X509证书 指定了无效的提供程序类型 System.Security.Cryptography.CryptographicException 错误解决方法
  2. oracle大数据量更新引发的死锁问题解决方法及oracle分区和存储过程的思考
  3. 拼购电商不是团购,但扎的的却是三四五线城市老百姓的心
  4. 数据结构之通过C++来实现一个队列
  5. 使用Arcgis进行画面(线)并计算大小(长度)。
  6. Spring boot 自定义banner
  7. LeetCode 1272. 删除区间
  8. 彻夜怒肝!SpringBoot+Sentinel+Nacos高并发已撸完
  9. js 去除空格回车换行
  10. 氮化镓充电器哪家好_氮化镓充电器又添一员猛将
  11. 强悍的 Linux —— grep 与 egrep
  12. jms pub/sub模型_JMS消息传递模型:点对点和发布/订阅
  13. vc浏览器_自主创业项目推荐,晨兴资本刘芹:我的市场非共识+超配投资原则VC洞见...
  14. php服务器启动错误,服务器意外重启之后PHP-FPM不能启动
  15. 免费书签管理工具:浏览器书签杂乱的整理方法
  16. 无线网络优化(家用无线网)
  17. zynqMP LINUX 启动流程和移植
  18. ArcEngine实现动态加载地图
  19. Tracup丨什么是敏捷产品管理?
  20. C++修正儒略日转UTC时间

热门文章

  1. SAP CDS view自学教程之六:如何在CDS view里消费table function
  2. 如何自行分析定位SAP BSP错误
  3. if delete annotation.xml in project folder, not local service folder
  4. CBA - Success function for Create Oppt call
  5. UI5 plugin - uploadCollection
  6. doorway path issue of my task in HCP
  7. Chrome每次打开时报的关于扩展程序的警告信息
  8. Cloud for Customer UI里点了超链接后的跳转处理
  9. 一步步使SSH连接您的github仓库
  10. 如何使用Cyberduck登录SAP Leonardo机器学习服务的AWS在线存储