摘要:用一行表示它们的关系就是运算对象运算符表达式语句运算对象和运算符构成表达式,表达式构成语句运算对象运算对象就是由各种对象构成的集合,这些对象里面有些是常量,有些是变量。
编程的本质就是数据和运算,数据由基本数据类型、数据结构来表示,运算就是对这些数据的各种操作,基本的加减乘除、是非判断、流程控制等等。这些操作就是今天我们要讲的运算符、表达式和语句。
前面我们学习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等。
用一行表示它们的关系就是:
运算对象 + 运算符 -> 表达式 -> 语句
运算对象和运算符构成表达式,表达式构成语句
![(http://upload-images.jianshu....
运算对象运算对象就是由各种对象构成的集合,这些对象里面有些是常量,有些是变量。
常量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中,就先计算圆括号里面的加法,然后再进行乘法。这个原则跟小学时学到的算术是一样的。
表达式(Expression)表达式是一段可以计算为某个值的语法片段。换句话说,就是表达元素的累积,比如文字,名称,属性访问,运算符或函数调用,它们都返回一个值。与许多其它语言相比,并非所有语言结构都是表达式。还有一些语句不能用作表达式,比如while。赋值也是语句,但不是表达式。
从上面对表达式的定义来看,a > 3是表达式,a = 3不是表达式,而是赋值语句。
语句(Statements)语句是程序段(一个代码“块”)的组成单位。一条语句可以是一个表达式或某个带有关键字的结构,例如if, while或for。
语句的例子:
a = 5 # 赋值语句 if a > 3: #条件语句,其中 a > 3是表达式 print("a > 3") #输出语句总结
程序由语句组成;语句或是由表达式构成,或是赋值,或是if, while等关键字的结构;表达式由运算符和运算对象(数字、字符串等常量,变量等)组成,是语句的构成元素。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/43757.html
文章目录 强烈推荐系列教程,建议学起来!! 一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置 4.2手动添加镜像源4.3永久配置镜像源 五.插件安装(比如汉化?)5.1自动补码神器第一款5.2汉化pycharm5.3其它插件 六.美女背景七.自定义脚本开头八、这个前言一定要看九、pyt...
摘要:函数内的变量被称为局部变量,这是与全局变量相反的概念。有一些进行函数式编程的机制。继承以通用的类为基础建立专门的类对象。 6.4.5 参数收集的逆过程 假设有如下函数: def add(x,y): return x+y 比如说有个包含由两个相加的数字组成的元组: params = (1,2) 使用*运算符对参数进行分配,不过是在调用而不是在定义时使用: >>> add(*params)...
马上就要开始啦这次共组织15个组队学习 涵盖了AI领域从理论知识到动手实践的内容 按照下面给出的最完备学习路线分类 难度系数分为低、中、高三档 可以按照需要参加 - 学习路线 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...
摘要:在定义函数时给定的名称称作形参,在调用函数时你所提供给函数的值称作实参。调用函数要调用一个函数,需要知道函数的名称和参数。默认参数值可以有效帮助解决这一情况。是默认参数定义默认参数要牢记一点默认参数必须指向不变对象。 关于数据科学在做什么,我们已经在前两篇文章中进行了总结,即专题概述和描述性统计分析。要进行数据科学的探索,需要一个好工具,就是Python。从本篇开始,将总结学习Pyth...
阅读 2770·2021-10-11 11:08
阅读 1488·2021-09-30 09:48
阅读 1048·2021-09-22 15:29
阅读 1036·2019-08-30 15:54
阅读 976·2019-08-29 15:19
阅读 526·2019-08-29 13:12
阅读 3159·2019-08-26 13:53
阅读 956·2019-08-26 13:28