第 11 章 作业、表达式和打印 赋值、表达式和打印
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
现在,我们已经对 Python 语句语法有了一个快速的介绍,本章将开始我们对特定 Python 语句的深入学习。我们将从基本语句开始:赋值语句、表达式语句和打印操作。我们已经看到了所有这些语句的实际应用,但在这里我们将填补我们迄今为止跳过的重要细节。尽管它们相对简单,但正如您将看到的,这些语句类型都有可选的变化,一旦您开始编写实际的 Python 程序,这些变化就会派上用场。
作业陈述
我们已经使用Python 赋值语句将对象赋值给名字一段时间了。其基本形式是,在等号左边写赋值的目标,在右边写要赋值的对象。左边的目标可以是名称或对象组件,右边的对象可以是计算对象的任意表达式。在大多数情况下,赋值是简单明了的,但这里有几个属性需要注意:
赋值创建对象引用。正如在第 6 章 中所讨论的,Python 赋值将对象引用存储在名称或数据结构组件中。它们总是创建对象引用,而不是复制对象。因此,Python 变量更像是指针,而不是数据存储区。
名称是在第一次赋值时创建的。Python 会在第一次赋值时创建变量名 (即对象引用),因此不需要提前声明名称。某些(但不是全部)数据结构槽也会在赋值时创建(例如字典条目、某些对象属性)。一旦赋值,只要名称出现在表达式中,它就会被其引用的值替换。
名称在被引用之前必须先赋值。使用一个尚未赋值的名称是错误的。如果尝试使用,Python 会引发异常,而不是返回某种模糊的缺省值。在 Python 中,这一点至关重要,因为名称不是预先声明的--如果 Python 为程序中使用的未赋值名称提供缺省值,而不是将其视为错误,那么您就更难发现代码中的名称错误了。
有些操作隐式地执行赋值。在本节中,我们关注的是
=语句,但在 Python 中的许多上下文中都会出现赋值。例如,我们稍后会看到模块导入、函数和类定义、for循环变量和函数参数都是隐式赋值。因为赋值在任何地方出现都是一样的,所有这些上下文都只是在运行时将名称绑定(即赋值) 到对象引用。
任务陈述表
尽管赋值在Python 中是一个普遍存在的一般概念,但我们在本章中主要关注赋值语句。表 11-1展示了 Python 中不同的赋值语句形式及其语法模式。
| 运行 | 口译 |
|---|---|
| 基本形式 |
| 元组赋值(位置 |
| 列表任务(位置 |
| 序列分配,通用 |
| 扩展序列解包(Python 3.X) |
| 多目标分配 |
| 增量分配(相当于 |
表 11-1中的第一种形式是迄今为止最常见的:将名称(或数据结构组件)绑定到单个对象。事实上,仅用这种基本形式就可以完成所有工作。表中的其他条目代表了一些特殊形式,它们都是可选的,但程序员在实际操作中往往会觉得它们很方便:
- 元组和列表拆包作业
表中的第二种和第三种形式是相关的。当您在
=左侧编码一个元组或列表时,Python 将右侧的对象与左侧的目标按位置配对,并从左到右赋值。例如,在表 11-1 的第二行中,名称spam被赋值给字符串'yum',而名称ham被绑定到字符串'YUM'上。在这种情况下,Python 内部可能会将右边的项组成一个元组,这就是为什么称为元组解包赋值的原因。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access