首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开源图书《Python完全自学教程》6.1.1赋值语句

开源图书《Python完全自学教程》6.1.1赋值语句

作者头像
老齐
发布于 2022-05-17 09:42:40
发布于 2022-05-17 09:42:40
8350
举报
文章被收录于专栏:老齐教室老齐教室

6.1 简单语句

在编程中,常常遇到表达式(Expression)和语句(Statement)这两个概念,有很多资料对二者的区别进行了阐述,不一而足。根据我们的数学知识可知,编程语言中的“表达式”应该是借鉴了或者延续了数学的同名概念。数学中的表达式是由数字、变量、算符、括号等依据上下文的规则而得的定义良好的组合,例如:9x-5 、\int_0^1\frac{2}{x}dx

等等。显然,从数值计算的角度看,数学表达式最终可以得到相应计算结果。将此概念延续到编程语言中,则认为编程语言中的表达式也具有类似的特点,即能够执行并返回执行结果的一条指。

编程语言中的语句,是指要执行的“动作”,它具有内部结构和语法要求。在 Python 语言中,有的语句比较简单,只需要一个逻辑行,称此类语句为“简单语句”;有的会包含多个简单语句,称之为“复合语句”。本节将要学习几个常见的简单语句,有部分内容其实前面已经在使用。

6.1.1 赋值语句

我们对赋值语句(Assignment Statement)已经不陌生,从第2章开始已经在使用,如:

代码语言:javascript
复制
>>> book = 'python'
>>> book
'python'

更一般化地表述,Python 中的赋值语句就是将名称(如变量 book )与对象绑定——建立引用关系,这是自学习变量以来一直强调的。

在 Python 中,赋值语句还有其他形式的写法,例如:

代码语言:javascript
复制
>>> x, y, z = 1, "python", ["hello", "world"]
>>> x
1
>>> y
'python'
>>> z
['hello', 'world']
>>> x, *y = 1, "python", ["hello", "world"]    # (1)
>>> x
1
>>> y
['python', ['hello', 'world']]
>>> x = 1, "python", ["hello", "world"]        # (2)
>>> x
(1, 'python', ['hello', 'world'])

注释(1)中的 *y 表示“收集”除了第一对象( 1 被 x 引用或绑定)之外所有的对象,并“收集到”一个“容器”中—— y 引用列表( *y 中的 * 符号此处不是“乘法”符号,关于它的介绍请参阅第7章7.2节)。注释(2)则用一个变量与等号右侧的三个对象“绑定”——将它们作为元组的成员,变量 x 引用此元组。

不同的编程语言,通过赋值语句所建立的名称与对象的关系略有不同,通常可以分为两类,用比较形象地方式说明,一类是“标签”型;另外一类是“盒子”型。下面一个典型示例来说明这两种类型的不同:假设有两个变量,其中 a = 2 ,b = 9 。现在想让这两个变量的值对调,即最终得到 a = 9 ,b = 2 。

对于“盒子”型语言,必须先创建两个整数类型的变量,就如同两个“盒子”,然后把数字 2 和 9 分别“装入”这两个盒子——每个“盒子”能且仅能装一个数字,伪代码如下:

代码语言:javascript
复制
int a = 2;
int b = 9

要实现两个“盒子”中的对象对调,必须再创建一个中间的过度“盒子”,用于“中转”对象(因为每个盒子仅能装一个数字):

代码语言:javascript
复制
int temp;
temp = a    # 2 转到 temp
a = b       # a 中的值为 9
b = temp    # b 中的值为 2

这样才实现了数值对调的要求。

此问题如果用 Python 语言实现,就简洁多了。

代码语言:javascript
复制
>>> a, b = 2, 9
>>> a
2
>>> b
9
>>> a, b = b, a    # (3)
>>> a
9
>>> b
2

核心代码就是注释(3),通过赋值语句,实现了变量所引用对象的对调——像“标签”那样,分别贴在不同物体上。

其实,这里为了叙述形象而给编程语言划分的两个类别,用专业的术语就分别对应着“动态编程语言”和“静态编程语言”。有兴趣对这两个专业术语深入了解的读者,可以自行查找资料,本书点到为止。借用上面的示例,我们可以深入理解 Python 中的赋值语句特点和应用。

Python 中的赋值语句还有一种被称为“链式赋值”的写法。

代码语言:javascript
复制
>>> you = me = 'life is short'    # (4)
>>> you
'life is short'
>>> me
'life is short'

注释(4)的“链式赋值”就是变量 you 和 me 同时引用同一个对象。

在第3章3.2节学习过算术运算,如:

代码语言:javascript
复制
>>> a = 2        # (5)
>>> a = a + 3    # (6)
>>> a
5

按照现在所学,注释(5)(6)都是赋值语句。注释(5)中变量 a 引用整数 2 ;注释(6)中先计算表达式 a + 3 ,即 2 + 3 ,然后变量 a 引用计算结果 5 。如果从表象上看,注释(6)实现的是“在变量 a 的原有值基础上增加 3 ”,形象地说成“自增”。Python 语言为这种情况专门提供了一类新的实现形式:

代码语言:javascript
复制
>>> a = 2
>>> a += 3    # (7)
>>> a
5

注释(7)与注释(6)等效。注意,有的语言提供的 ++ 操作符,至少在目前的 Python 版本( Python 3.9 )中不支持。

其他的算术运算符:- 、 * 、/ 、% 也支持类似这种形式操作。

代码语言:javascript
复制
>>> b = 10
>>> b /= 2
>>> b
5.0

通过赋值语句,建立了“变量”和对象的引用关系——更一般地说,是名称与对象之间的引用关系。但是,在实际的编程中并非总是像此前所学那么简单,比如在第7章会遇到“作用域”问题,在第8章中还会出现对象属性与值之间的绑定问题。随着学习的深入,对赋值语句的理解也会不断深化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 6.1 简单语句
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档