编程的本质就是数据和运算,数据由基本数据类型、数据结构来表示,运算就是对这些数据的各类操做,基本的加减乘除、是非判断、流程控制等等。这些操做就是今天咱们要讲的运算符、表达式和语句。shell
前面咱们学习Python的基本语法时,讲到了Python程序的行的概念,这个行再细分就是运算符(Operators)、运算对象(Operands)、表达式(Express)、语句(Statements)。express
提示:运算和操做这两个概念在编程中每每是同样的编程
好比下面这一行代码:数据结构
a = 5; b = a + 7; c = a if a > b else b
先来分解一下这一行:async
;
分开,即一个物理行有三个逻辑行;a + 7
, a > b
等;a, b, c, 5, 7
等。用一行表示它们的关系就是:函数
运算对象 + 运算符 -> 表达式 -> 语句
学习
运算对象和运算符构成表达式,表达式构成语句测试
![(http://upload-images.jianshu....spa
运算对象就是由各类对象构成的集合,这些对象里面有些是常量,有些是变量。code
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
等关键字的结构;表达式由运算符和运算对象(数字、字符串等常量,变量等)组成,是语句的构成元素。