第十节 元组、设置代码格式

4.5 元组

列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一 系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组 。

4.5.1 定义元组

元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问其元素,就像访问列表元素一样。

例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从 而确保它们是不能修改的:

dimensions.py

dimensions = (200, 50)❶ 
print(dimensions[0])❷ 
print(dimensions[1])

首先定义元组dimensions (见❶),为此使用了圆括号而不是方括号。接下来, 分别打印该元组的各个元素,使用的语法与访问列表元素时使用的语法相同(见❷):

200 
50

下面来尝试修改元组dimensions的一个元素,看看结果如何:

dimensions = (200, 50) 
dimensions[0] = 250❶

❶处的代码试图修改第一个元素的值,导致Python返回类型错误消息。由于试图修改元组的操作是被禁止的,因此Python指出不能给元组的元素赋值:

Traceback (most recent call last): 
    File "C:\Users\Administrator\Desktop\5.py", line 2, in <module> dimensions[0] = 250 
TypeError: 'tuple' object does not support item assignment

这很好,因为我们希望Python在代码试图修改矩形的尺寸时引发错误。

注意严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号:

my_t = (3,)

创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。

4.5.2 遍历元组中的所有值

像列表一样,也可以使用for循环来遍历元组中的所有值:

dimensions = (200, 50) 
for dimension in dimensions: 
    print(dimension)

就像遍历列表时一样,Python返回元组中所有的元素:

200 
50

4.5.3 修改元组变量

虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述 矩形的尺寸,可重新定义整个元组:

dimensions = (200, 50)❶ 
print("Original dimensions:") 
for dimension in dimensions: 
    print(dimension) 
dimensions = (400, 100)❷ 
print("\nModified dimensions:")❸ 
for dimension in dimensions: 
    print(dimension)

首先定义一个元组,并将其存储的尺寸打印出来(见❶)。接下来,将一个新元组关联到变量dimensions (见❷)。然后,打印新的尺寸(见❸)。这次,Python不会引发任何错误,因为给元组变量重新赋值是合法的:

Original dimensions: 
200 
50 
Modified dimensions: 
400 
100

相比于列表,元组是更简单的数据结构。如果需要存储的一组值在程序的整个生命 周期内都不变,就可以使用元组。

动手试一试

练习4-13:自助餐

有一家自助式餐馆,只提供五种简单的食品。请想出五种简单的食品,并将其存储在一个元组中。

  • 使用一个for 循环将该餐馆提供的五种食品都打印出来。
  • 尝试修改其中的一个元素,核实Python确实会拒绝你这样做。
  • 餐馆调整了菜单,替换了它提供的其中两种食品。请编写一个这样的代码块:给元组变量赋值,并使用一个for 循环将新元组的每个元素都打印出来。
foods = ('牛肉','五花肉','羊肉','蔬菜','鸡翅') 
for food in foods: 
    print(food) 
print() 
foods = ('牛肉','海鲜','羊肉','爆肚','鸡翅') 
for food in foods: 
    print(food)

4.6 设置代码格式

随着你编写的程序越来越长,有必要了解一些代码格式设置约定。请花时间让你的 代码尽可能易于阅读。这有助于你掌握程序是做什么的,也可以帮助他人理解你编 写的代码。

为确保所有人编写的代码结构都大致一致,Python程序员会遵循一些格式设置约定。学会编写整洁的Python后,就能明白他人编写的Python代码的整体结构——只要他们和你遵循相同的指南。要成为专业程序员,应从现在开始就遵循这些指南, 以养成良好的习惯。

4.6.1 格式设置指南

要提出Python语言修改建议,需要编写Python改进提案 (Python Enhancement Proposal,PEP)。PEP8是最古老的PEP之一,向Python程序员提供了代码格式设置指南。PEP8的篇幅很长,但基本上与复杂的编码结构相关。

Python格式设置指南的编写者深知,代码被阅读的次数比编写的次数多。代码编写出来后,调试时需要阅读;给程序添加新功能时,需要花很长的时间阅读;与其他程序员分享代码时,这些程序员也会阅读。

如果一定要在让代码易于编写和易于阅读之间做出选择,Python程序员几乎总是选择后者。下面的指南可帮助你从一开始就编写出清晰的代码。

4.6.2 缩进

PEP8建议每级缩进都使用四个空格。这既可提高可读性,又留下了足够的多级缩进空间。

在字处理文档中,大家常常使用制表符而不是空格来缩进。对于字处理文档来说, 这样做的效果很好,但混合使用制表符和空格会让Python解释器感到迷惑。每款文本编辑器都提供了一种设置,可将你输入的制表符转换为指定数量的空格。你在编写代码时绝对应该使用制表符键,但一定要对编辑器进行设置,使其在文档中插入空格而不是制表符。

在程序中混合使用制表符和空格可能导致极难排查的问题。如果混合使用了制表符和空格,可将文件中的所有制表符都转换为空格,大多数编辑器提供了这样的功能。

4.6.3 行长

很多Python程序员建议每行不超过80字符。最初制定这样的指南时,在大多数计算 机中,终端窗口每行只能容纳79字符。当前,计算机屏幕每行可容纳的字符数多得多,为何还要使用79字符的标准行长呢?这里有别的原因。专业程序员通常会在同一个屏幕上打开多个文件,使用标准行长可以让他们在屏幕上并排打开两三个文件时同时看到各个文件的完整行。PEP8还建议注释的行长不应超过72字符,因为有些工具为大型项目自动生成文档时,会在每行注释开头添加格式化字符。

PEP8中有关行长的指南并非不可逾越的红线,有些小组将最大行长设置为99字符。在学习期间,你不用过多考虑代码的行长,但别忘了,协作编写程序时,大家几乎都遵守PEP8指南。在大多数编辑器中,可以设置一个视觉标志(通常是一条竖线),让你知道不能越过的界线在什么地方。

注意附录B介绍了如何配置文本编辑器,使其在你按制表符键时插入四个空格,并且显示一条垂直参考线,帮助你遵守行长不超过79字符的约定。

4.6.4 空行

要将程序的不同部分分开,可使用空行。你应该使用空行来组织程序文件,但也不能滥用。只要按本书的示例展示的那样做,就能掌握其中的平衡。例如,如果你有五行创建列表的代码,还有三行处理该列表的代码,那么用一个空行将这两部分隔开是合适的。然而,你不应使用三四个空行将其隔开。

空行不会影响代码的运行,但会影响代码的可读性。Python解释器根据水平缩进情况来解读代码,但不关心垂直间距。

4.6.5 其他格式设置指南

PEP8还有很多其他的格式设置建议,但这些指南针对的程序大多比目前为止本书提到的程序复杂。等介绍更复杂的Python结构时,我们再来分享相关的PEP8指南。

动手试一试

练习4-14:PEP8 

请访问Python网站并搜索“PEP8 — Style Guide for Python Code”,阅读PEP8格式设置指南。当前,这些指南适用的情况不多, 但可以大致浏览一下。

练习4-15:代码审核

从本章编写的程序中选择三个,根据PEP8指南对它们进行修改。

  • 每级缩进都使用四个空格。对你使用的文本编辑器进行设置,使其在你按Tab键时插入四个空格。如果你还没有这样做,现在就去做吧(有关如何设置,请参阅附录B)。
  • 每行都不要超过80字符。对你使用的编辑器进行设置,使其在第80个字符处显示一条垂直参考线。
  • 不要在程序文件中过多使用空行。

4.7小结

在本章中,学习了:

如何高效地处理列表中的元素;

如何使用for循环遍历列表,Python如何根据缩进来确定程序的结构,以及如何避免一些常见的缩进错误;

如何创建简单的数字列表,以及可对数字列表执行的一些操作;

如何通过切片来使 用列表的一部分和复制列表。

你还学习了元组(它对不应变化的值提供了一定程度 的保护),以及在代码变得越来越复杂时如何设置格式,使其易于阅读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值