编程的本质就是数据和运算,数据由基本数据类型、数据结构来表示,运算就是对这些数据的各种操作,基本的加减乘除、是非判断、流程控制等等。这些操作就是今天我们要讲的运算符、表达式和语句。
前面我们学习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。这里同样适用“短路求值”
|
小时候学数学的时候,我们知道先乘除后加减,比如要算
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
中,就先计算圆括号里面的加法,然后再进行乘法。这个原则跟小学时学到的算术是一样的。
表达式是一段可以计算为某个值的语法片段。换句话说,就是表达元素的累积,比如文字,名称,属性访问,运算符或函数调用,它们都返回一个值。与许多其它语言相比,并非所有语言结构都是表达式。还有一些语句不能用作表达式,比如
while
。
赋值
也是语句,但不是表达式。
从上面对表达式的定义来看,
a > 3
是表达式,
a = 3
不是表达式,而是赋值语句。
语句是程序段(一个代码“块”)的组成单位。一条语句可以是一个表达式或某个带有关键字的结构,例如
if
,
while
或
for
。
语句的例子:
a = 5 # 赋值语句
if a > 3: #条件语句,其中 a > 3是表达式
print('a > 3') #输出语句
程序由语句组成;语句或是由表达式构成,或是赋值,或是
if
,
while
等关键字的结构;表达式由运算符和运算对象(数字、字符串等常量,变量等)组成,是语句的构成元素。
<<, >>, &, |, ^, ~
这些与操作,加深对二进制的位操作的理解。
文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890
Python Free
邮箱:417803890@qq.com
QQ:417803890
皖ICP备19001818号-4
© 2019 copyright www.pythonf.cn - All rights reserved
微信扫一扫关注公众号:
Python Free