返回介绍

第11章 赋值、表达式和打印

发布于 2024-01-29 22:24:16 字数 2003 浏览 0 评论 0 收藏 0

现在,我们已经快速地介绍了Python语句的语法,这一章要开始深入具体地学习Python语句。本章从基本着手——赋值语句、表达式语句和打印。本书前面已经接触过这些语句的用法,不过本章要详细介绍之前跳过的重要细节。尽管它们都相当简单,但这些语句的类型都有可选的各种形式,一旦开始撰写实际的Python程序,就会觉得很方便。

赋值语句

我们已经使用Python的赋值语句把对象赋给一个名称。其基本形式是在等号左边写赋值语句的目标,而要赋值的对象则位于右侧。左侧的目标可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象的表达式。绝大多数情况下,赋值语句都很简单,但有些特性要专门记住的,如下所示。

·赋值语句建立对象引用值。正如第6章讨论过的,Python赋值语句会把对象引用值存储在变量名或数据结构的元素内。赋值语句总是建立对象的引用值,而不是复制对象。因此,Python变量更像是指针,而不是数据存储区域。

·变量名在首次赋值时会被创建。Python会在首次将值(即对象引用值)赋值给变量时创建其变量名。有些(并非全部)数据结构元素也会在赋值时创建(例如,字典中的元素,一些对象属性)。一旦赋值了,每当这个变量名出现在表达式时,就会被其所引用的值取代。

·变量名在引用前必须先赋值。使用尚未进行赋值的变量名是一种错误。如果你试图这么做,Python会引发异常,而不是返回某种模糊的默认值;如果返回默认值,就很难在程序中找出输入错误的地方。

·执行隐式赋值的一些操作。本节中,我们关心的是=语句,但在Python中,赋值语句会在许多情况下使用。例如,模块导入、函数和类的定义、for循环变量以及函数参数全都是隐式赋值运算。因为赋值语句在任何出现的地方的工作原理都相同,所有这些环境都是在运行时把变量名和对象的引用值绑定起来而已。

赋值语句的形式

虽然赋值运算是Python中通用并且一般的概念,但本章的主要内容在于赋值语句。表11-1说明Python中不同的赋值语句的形式。

表11-1中的第一种形式是至今最常见的——把一个变量名(或数据结构元素)绑定到单个对象上。实际上,仅仅使用这些基本的形式就可以搞定所有的工作了。其他的表中的项目代表了程序员通常会觉得很方便的特定的和可选的形式。

元组及列表分解赋值

表中第二和第三种形式是相关的。当在“=”左边编写元组或列表时,Python会按照位置把右边的对象和左边的目标从左至右相配对。例如,表中第二行,字符串'yum'赋值给变量名spam,而变量名ham则绑定至字符串'YUM'。从内部实现上来看,Python会先在右边制作元素的元组,所以这通常被称为元组分解赋值语句。

序列赋值语句

在最新的Python版本中,元组和列表赋值语句已统一为现在所谓的序列赋值语句的实例——任何变量名的序列都可赋值给任何值的序列,而Python会按位置一次赋值一个元素。实际上,我们可以混合和比对涉及的序列类型。例如,表11-1的第四行,把变量名的元组和字符的字符串对应起来:a赋值为's',b赋值为'p'等。

扩展的序列解包

在Python 3.0中,一种新形式的序列赋值允许我们更灵活地选择要赋值的一个序列的部分。例如,表11-1中的第五行,用右边的字符串的第一个字母来匹配a,用剩下的部分来匹配b:a赋值为's',b赋值为'pam'。这为手动分片操作的结果的赋值提供了一种简单的替代方法。

多重目标赋值

表11-1的第五行指的是多重目标形式的赋值语句。在这种形式中,Python赋值相同对象的引用值(最右边的对象)给左边的所有目标。表11-1中,变量名spam和ham两者都赋值成对相同的字符串对象'lunch'的引用。效果就好像我们写成ham='lunch',而后面再写spam=ham,这是因为ham会得到原始的字符串对象(也就是说,它并不是这个对象的独立的拷贝)。

增强赋值语句

表11-1的最后一行是增强赋值语句的例子——一种以简洁的方式结合表达式和赋值语句的简写形式。例如,"spam+=42"相当于"spam=spam+42",然而增强形式输入较少,而且通常执行得更快。此外,如果操作主体是可变的并且支持这一操作,增强赋值通过选择原处更新操作而不是对象副本,从而可以更快地运行。在Python中,每个二元表达式运算符都有增强赋值语句。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文