栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

❥❥全网最全python操作列表来袭❥❥(建议收藏)(^

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

❥❥全网最全python操作列表来袭❥❥(建议收藏)(^

第4章 操作列表

4.1 遍历整个列表
你经常需要遍历列表的所有元素,对每个元素执行相同的操作。例 如,在游戏中,可能需要将每个界面元素平移相同的距离;对于包 含数字的列表,可能需要对每个元素执行相同的统计运算;在网站 中,可能需要显示文章列表中的每个标题。需要对列表中的每个元 素都执行相同的操作时,可使用Python中的for 循环。

假设我们有一个魔术师名单,需要将其中每个魔术师的名字都打印 出来。为此,可以分别获取名单中的每个名字,但这种做法会导致 多个问题。例如,如果名单很长,将包含大量重复的代码。另外, 每当名单的长度发生变化时,都必须修改代码。通过使用for 循 环,可以让Python去处理这些问题。

下面使用for 循环来打印魔术师名单中的所有名字:

magicians = ['alice', 'bob', 'carolina']
for magician in magicians:
    print(magician)
cats = ['alice', 'bob', 'carolina']
for cat in cats:
    pass
    结果:IndentationError: expected an indented block (3265874414.py, line 5)
  File "/var/folders/61/c7zbwys51jx0f5_c9hl6jcfm0000gp/T/ipykernel_44725/3265874414.py", line 5
    for cat in cats:
                    ^
IndentationError: expected an indented block

4.1.1 深入研究循环

循环这种概念很重要,因为它是让计算机自动完成重复工作的常见 方式之一。例如,在前面magicians.py中使用的简单循环里,Python 将首先读取其中的第一行代码:

for magician in magicians:

这行代码让Python获取列表magicians 中的第一个值’alice’ ,并 将其与变量magician 相关联。接下来,Python读取下一行代码:

print(magician)

另外,编写for 循环时,可以给依次与列表中每个值相关联的临时 变量指定任意名称。然而,选择描述单个列表元素的有意义名称大 有裨益。例如,对于小猫列表、小狗列表和一般性列表,像下面这 样编写for 循环的第一行代码是不错的选择:

for cat in cats:
    pass
for dog in dogs:
    pass
for item in list_of_items:
    pass

这些命名约定有助于你明白for 循环中将对每个元素执行的操作。 使用单数和复数式名称,可帮助你判断代码段处理的是单个列表元 素还是整个列表。
4.1.2 在for 循环中执行更多操作

在for 循环中,可对每个元素执行任何操作。下面来扩展前面的示 例,对于每位魔术师,都打印一条消息,指出他的表演太精彩了。

magicians = ['alice', 'bob', 'carolina']
for magician in magicians:
    print(f"{magician.title()}, that was as greet trick!")``
    结果:
Alice, that was as greet trick!
Bob, that was as greet trick!
Carolina, that was as greet trick!

在for 循环中,想包含多少行代码都可以。在代码行for magician in magicians 后面,每个缩进的代码行都是循环的一 部分,将针对列表中的每个值都执行一次。因此,可对列表中的每 个值执行任意次数的操作。
下面再添加一行代码,告诉每位魔术师,我们期待他的下一次表 演:

magicians = ['alice', 'bob', 'carolina']
for magician in magicians:
    print(f"{magician.title()}, that was as greet trick!")
    print(f"I can't wait to see yr next trick, {magician.title()}")
    结果:Alice, that was as greet trick!
I can't wait to see yr next trick, Alice
Bob, that was as greet trick!
I can't wait to see yr next trick, Bob
Carolina, that was as greet trick!
I can't wait to see yr next trick, Carolina

4.1.3 在for 循环结束后执行一些操作
for 循环结束后怎么办呢?通常,你需要提供总结性输出或接着执 行程序必须完成的其他任务。

在for 循环后面,没有缩进的代码都只执行一次,不会重复执行。 下面来打印一条向全体魔术师致谢的消息,感谢他们的精彩表演。 想要在打印给各位魔术师的消息后面打印一条给全体魔术师的致谢 消息,需要将相应的代码放在for 循环后面,且不缩进:

agicians = ['alice', 'bob', 'carolina']
for magician in magicians:
    print(f"{magician.title()}, that was as greet trick!")
    print(f"I can't wait to see yr next trick, {magician.title()}")
print("没有缩进")
结果:Alice, that was as greet trick!
I can't wait to see yr next trick, Alice
Bob, that was as greet trick!
I can't wait to see yr next trick, Bob
Carolina, that was as greet trick!
I can't wait to see yr next trick, Carolina
没有缩进
magicians = ['alice', 'bob', 'carolina']
for magician in magicians:
    print(f"{magician.title()}, that was as greet trick!")
    print(f"I can't wait to see yr next trick, {magician.title()}")
print("没有缩进")
print(magician)
del magician
print(magician)
结果:Alice, that was as greet trick!
I can't wait to see yr next trick, Alice
Bob, that was as greet trick!
I can't wait to see yr next trick, Bob
Carolina, that was as greet trick!
I can't wait to see yr next trick, Carolina
没有缩进
carolina
NameError: name 'magician' is not defined
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/var/folders/61/c7zbwys51jx0f5_c9hl6jcfm0000gp/T/ipykernel_44725/1810894605.py in 
      6 print(magician)
      7 del magician
----> 8 print(magician)

NameError: name 'magician' is not defined

Python中变量无需申明, 这样我们对他的生命周期就比较迷惑, 比如C语言中for循环的k在for循环外就会消失, 但是在Python中magician在循环外仍旧存在**

实际上, Python中的变量由编译器自动回收(当然, 你也可以使用del强制回收)
4.2 避免缩进错误
Python根据缩进来判断代码行与前一个代码行的关系。在前面的示 例中,向各位魔术师显示消息的代码行是for 循环的一部分,因为 它们缩进了。Python通过使用缩进让代码更易读。简单地说,它要 求你使用缩进让代码整洁而结构清晰。在较长的Python程序中,你 将看到缩进程度各不相同的代码块,从而对程序的组织结构有大致 的认识。

开始编写必须正确缩进的代码时,需要注意一些常见的缩进错误 。例如,程序员有时候会将不需要缩进的代码块缩进,而对于必须 缩进的代码块却忘了缩进。查看这样的错误示例有助于你以后避开 它们,以及在它们出现在程序中时进行修复。
下面来看一些较为常见的缩进错误。
4.2.1 忘记缩进
对于位于for 语句后面且属于循环组成部分的代码行,一定要缩 进。如果忘记缩进, Python会提醒你:

magicians = ['alice', 'bob', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was as greet trick!")
结果:IndentationError: expected an indented block (77887116.py, line 3)
  File "/var/folders/61/c7zbwys51jx0f5_c9hl6jcfm0000gp/T/ipykernel_44725/77887116.py", line 3
    print(f"{magician.title()}, that was as greet trick!")
    ^
IndentationError: expected an indented block

4.2.2 忘记缩进额外的代码行

有时候,循环能够运行且不会报告错误,但结果可能出人意料。试 图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会 出现这种情况。

例如,如果忘记缩进循环中的第二行代码(它告诉每位魔术师,我 们期待其下次表演),就会出现这种情况

magicians = ['alice', 'bob', 'carolina']
for magician in magicians:
    print(f"{magician.title()}, that was as greet trick!")
print(f"I can't wait to see yr next trick, {magician.title()}")
结果:Alice, that was as greet trick!
Bob, that was as greet trick!
Carolina, that was as greet trick!
I can't wait to see yr next trick, Carolina

这是一个逻辑错误 。从语法上看,这些Python代码是合法的,但由 于存在逻辑错误,结果并不符合预期。如果你预期某项操作将针对 每个列表元素都执行一次,但它总共只执行了一次,请确定需要将 一行还是多行代码缩进。
4.2.3 不必要的缩进

如果你不小心缩进了无须缩进的代码行,Python将指出这一点

message = "Hello Python world!"
    print(message)
    结果:IndentationError: unexpected indent (2495908521.py, line 2)
  File "/var/folders/61/c7zbwys51jx0f5_c9hl6jcfm0000gp/T/ipykernel_44725/2495908521.py", line 2
    print(message)
    ^
IndentationError: unexpected indent

为避免意外缩进错误,请只缩进需要缩进的代码。在前面编写的程 序中,只有要在for 循环中对每个元素执行的代码需要缩进。
4.2.4 循环后不必要的缩进

如果不小心缩进了应在循环结束后执行的代码,这些代码将针对每 个列表元素重复执行。在有些情况下,这可能导致Python报告语法 错误,但在大多数情况下,这只会导致逻辑错误。

例如,如果不小心缩进了感谢全体魔术师精彩表演的代码行,结果 将如何呢?

magicians = ['alice', 'bob', 'carolina']
for magician in magicians:
    print(f"{magician.title()}, that was as greet trick!")
    print(f"I can't wait to see yr next trick, {magician.title()}")
    print()
    print("Thank you everyone, that was a great magic show!")
    结果:Alice, that was as greet trick!
I can't wait to see yr next trick, Alice

Thank you everyone, that was a great magic show!
Bob, that was as greet trick!
I can't wait to see yr next trick, Bob

Thank you everyone, that was a great magic show!
Carolina, that was as greet trick!
I can't wait to see yr next trick, Carolina

Thank you everyone, that was a great magic show!

4.2.5 遗漏了冒号

for 语句末尾的冒号告诉Python,下一行是循环的第一行。

magicians = ['alice', 'bob', 'carolina']
for magician in magicians
    print(f"{magician.title()}, that was as greet trick!")
    结果:SyntaxError: invalid syntax (3390044093.py, line 2)
  File "/var/folders/61/c7zbwys51jx0f5_c9hl6jcfm0000gp/T/ipykernel_44725/3390044093.py", line 2
    for magician in magicians
                             ^
SyntaxError: invalid syntax

动手练一练

联系4.1 比萨

想出至少三种你喜欢的比萨,将其名称存储 在一个列表中,再使用for 循环将每种比萨的名称打印出来。

  • 修改这个for 循环,使其打印包含比萨名称的句子,而不 仅仅是比萨的名称。对于每种比萨,都显示一行输出,下 面是一个例子。
`I like pepperoni pizza.`
  • 在程序末尾添加一行代码,它不在for 循环中,指出你有 多喜欢比萨。输出应包含针对每种比萨的消息,还有一个 总结性句子,下面是一个例子。
`I really love pizza!`
noodles = ['牛肉面', '尕面片', '臊子面']
for noodle in noodles:
    print(f"我喜欢吃{noodle}!")
print("所有面食我都喜欢!")
我喜欢吃牛肉面!
我喜欢吃尕面片!
我喜欢吃臊子面!
所有面食我都喜欢!

练习4-2:动物

想出至少三种有共同特征的动物,将其名称 存储在一个列表中,再使用for 循环将每种动物的名称打印出 来。

  • 修改这个程序,使其针对每种动物都打印一个句子,下面 是一个例子。
`A dog would make a great pet.`
  • 在程序末尾添加一行代码,指出这些动物的共同之处,如 打印下面这样的句子。
`Any of these animals would make a great pet!`

4.3 创建数值列表

需要存储一组数的原因有很多。例如,在游戏中,需要跟踪每个角 色的位置,还可能需要跟踪玩家的几个最高得分;在数据可视化 中,处理的几乎都是由数(如温度、距离、人口数量、经度和纬度 等)组成的集合。

列表非常适合用于存储数字集合,而Python提供了很多工具,可帮 助你高效地处理数字列表。明白如何有效地使用这些工具后,即便 列表包含数百万个元素,你编写的代码也能运行得很好。

4.3.1 使用函数range()

Python函数range() 让你能够轻松地生成一系列数。例如,可以像 下面这样使用函数range() 来打印一系列数:

# 左闭右开
for k in range(1, 5):
    print(k)
    结果:1
2
3
4
``

```python
 左默认为0
for k in range(5):
    print(k)
    结果:0
1
2
3
4

4.3.2 使用range() 创建数字列表

要创建数字列表,可使用函数list() 将range() 的结果直接转换 为列表。如果将range() 作为list() 的参数,输出将是一个数字 列表。

在前一节的示例中,只是将一系列数打印出来。要将这组数转换为 列表,可使用list() :

numbers = list(range(1, 6))
print(numbers)
numbers = list(range(6))
print(numbers)
结果:[1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]

含步长

`range(left, right, step)`
even_numbers = list(range(2, 11, 2))
odd_numbers = list(range(1, 11, 2))
print(even_numbers)
print(odd_numbers)
结果:[2, 4, 6, 8, 10]
[1, 3, 5, 7, 9]

负数同样可以

print(list(range(-10, 6, 3)))
print(list(range(10, -6, -3)))
print(list(range(-10, 6, -3)))#
print(list(range(10, -6, 3)))#
结果:[-10, -7, -4, -1, 2, 5]
[10, 7, 4, 1, -2, -5]
[]
[]

使用函数range() 几乎能够创建任何需要的数集。例如,如何创建 一个列表,其中包含前10个整数(1~10)的平方呢?在Python 中,用两个星号(** )表示乘方运算。下面的代码演示了如何将 前10个整数的平方加入一个列表中:

squares = [] 
for value in range(1, 11): 
    square = value ** 2
    squares.append(square)
print(squares)
结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4.3.3 对数字列表执行简单的统计计算

有几个专门用于处理数字列表的Python函数。例如,你可以轻松地 找出数字列表的最大值、最小值和总和:

digits = list(range(1, 12))
print(f"min = {min(digits)}")
print(f"max = {max(digits)}")
print(f"sum = {sum(digits)}")
结果:min = 1
max = 11
sum = 66

4.3.4 列表解析

前面介绍的生成列表squares 的方式包含三四行代码,而列表解析 让你只需编写一行代码就能生成这样的列表。列表解析 将for 循 环和创建新元素的代码合并成一行,并自动附加新元素。面向初学 者的书并非都会介绍列表解析,这里之所以介绍列表解析,是因为 等你开始阅读他人编写的代码时,很可能会遇到它。

下面的示例使用列表解析创建你在前面看到的平方数列表:

squares = [f"{k}^2={k**2}" for k in range(1, 11)]
print(squares)
结果:['1^2=1', '2^2=4', '3^2=9', '4^2=16', '5^2=25', '6^2=36', '7^2=49', '8^2=64', '9^2=81', '10^2=100']

动手试一试

练习4-3:数到20

使用一个for 循环打印数1~20(含)。

for k in range(20):
    print(k+1)
    结果:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

练习4-4:一百万

创建一个包含数1~1 000 000的列表,再使 用一个for 循环将这些数打印出来。(如果输出的时间太长, 按Ctrl + C停止输出或关闭输出窗口。)

练习4-5:一百万求和

创建一个包含数1~1 000 000的列 表,再使用min() 和max() 核实该列表确实是从1开始、到1 000 000结束的。另外,对这个列表调用函数sum() ,看看 Python将一百万个数相加需要多长时间。

numbers = list(range(1, 1_000_000+1))
print(min(numbers))
print(max(numbers))
print(sum(numbers))
结果:1
1000000
500000500000

练习4-6:奇数

通过给函数range() 指定第三个参数来创建 一个列表,其中包含1~20的奇数,再使用一个for 循环将这 些数打印出来。

odd_numbers = list(range(1, 20, 2))
print(odd_numbers)
结果:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

练习4-7:3的倍数

创建一个列表,其中包含3~30能被3整除 的数,再使用一个for 循环将这个列表中的数打印出来。
练习4-8:立方

将同一个数乘三次称为立方 。例如,在 Python中,2的立方用2**3 表示。请创建一个列表,其中包含 前10个整数(1~10)的立方,再使用一个for 循环将这些立 方数打印出来。

t = [k**3 for k in range(1, 11)]
print(t)
结果:[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

练习4-9:立方解析

使用列表解析生成一个列表,其中包含 前10个整数的立方。
99乘法表

for k in range(1, 10):
    for m in range(1, k+1):
        print(f'{k}x{m}={k*m:2d}', end='t')
    print()
    结果:
1x1= 1	
2x1= 2	2x2= 4	
3x1= 3	3x2= 6	3x3= 9	
4x1= 4	4x2= 8	4x3=12	4x4=16	
5x1= 5	5x2=10	5x3=15	5x4=20	5x5=25	
6x1= 6	6x2=12	6x3=18	6x4=24	6x5=30	6x6=36	
7x1= 7	7x2=14	7x3=21	7x4=28	7x5=35	7x6=42	7x7=49	
8x1= 8	8x2=16	8x3=24	8x4=32	8x5=40	8x6=48	8x7=56	8x8=64	
9x1= 9	9x2=18	9x3=27	9x4=36	9x5=45	9x6=54	9x7=63	9x8=72	9x9=81

4.4 使用列表的一部分

在第3章中,你学习了如何访问单个列表元素。在本章中,你一直 在学习如何处理列表的所有元素。你还可以处理列表的部分元素, Python称之为切片 。

`4.4.1 切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。 与函数range() 一样,Python在到达第二个索引之前的元素后停 止。要输出列表中的前三个元素,需要指定索引0和3,这将返回索 引为0、1和2的元素。

下面的示例处理的是一个运动队成员列表:

players = ['全红禅', '谢思埸', '王宗源', '王涵', '陈芋汐', '张家齐', '杨健']
print(players[0:3])
print(players[:3])
结果:['全红禅', '谢思埸', '王宗源']
['全红禅', '谢思埸', '王宗源']

左闭右开

players = ['全红禅', '谢思埸', '王宗源', '王涵', '陈芋汐', '张家齐', '杨健']
print(players[1:4])
结果:players = ['全红禅', '谢思埸', '王宗源', '王涵', '陈芋汐', '张家齐', '杨健']
print(players[1:4])
['谢思埸', '王宗源', '王涵']
players = ['全红禅', '谢思埸', '王宗源', '王涵', '陈芋汐', '张家齐', '杨健']
print(players[3:])
['王涵', '陈芋汐', '张家齐', '杨健']

负索引

print(players[-3:])
['陈芋汐', '张家齐', '杨健']

含步长

players = ['全红禅', '谢思埸', '王宗源', '王涵', '陈芋汐', '张家齐', '杨健']
print(players[1:5:2])
print(players[5:1:-3])
print(players[::-1])
['谢思埸', '王涵']
['张家齐', '王宗源']
['杨健', '张家齐', '陈芋汐', '王涵', '王宗源', '谢思埸', '全红禅']

4.4.2 遍历切片

如果要遍历列表的部分元素,可在for 循环中使用切片。下面的示 例遍历前三名队员,并打印他们的名字:

players = ['全红禅', '谢思埸', '王宗源', '王涵', '陈芋汐', '张家齐', '杨健']
for player in players:
    print(player)
print('-' * 80)
for player in players[-3:]:
    print(player)
    全红禅
谢思埸
王宗源
王涵
陈芋汐
张家齐
杨健
--------------------------------------------------------------------------------
陈芋汐
张家齐
杨健

4.4.3 复制列表

我们经常需要根据既有列表创建全新的列表。下面来介绍复制列表 的工作原理,以及复制列表可提供极大帮助的一种情形。 要复制列表,可创建一个包含整个列表的切片,方法是同时省略起 始索引和终止索引([:] )。这让Python创建一个始于第一个元 素、终止于最后一个元素的切片,即整个列表的副本。

例如,假设有一个列表包含你最喜欢的四种食品,而你想再创建一 个列表,并在其中包含一位朋友喜欢的所有食品。不过,你喜欢的 食品,这位朋友也都喜欢,因此可通过复制来创建这个列表:

my_foods = ['麦当劳', '肯德基', '赛百味']
friend_foods = my_foods
friend_foods[0] = '乡村鸡'
print(my_foods[0])

乡村鸡

原因: list之间的赋值并非创建新的列表, 相当于原列表的一个别称**

如果要把一个list赋值给一个新的list, 需要`new_list = old_list[:]`或`new_list = old_list.copy()`
my_foods = ['麦当劳', '肯德基', '赛百味']
friend_foods = my_foods[:]#.copy()
friend_foods[0] = '乡村鸡'
print(my_foods)
结果:['麦当劳', '肯德基', '赛百味']

4.5 元组tuple

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

4.5.1 定义元组

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

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

shape = (400, 300)
print(f'矩形形状为:{shape[0]}x{shape[1]}')
矩形形状为:400x300

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

shape[0] = 800
TypeError: 'tuple' object does not support item assignment
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/var/folders/61/c7zbwys51jx0f5_c9hl6jcfm0000gp/T/ipykernel_44725/3748989597.py in 
----> 1 shape[0] = 800

TypeError: 'tuple' object does not support item assignment

注意: 只有一个元素的元组, 逗号是必须的

my_t = (3)
print(type(my_t))
my_t = (3,)
print(type(my_t))
结果:

4.5.2 遍历元组中的所有值

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

shape = (400, 300)
for each in shape:
    print(each)
    结果:400
300

4.5.3 修改元组变量

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

shape = (400, 300)
for each in shape:
    print(each)
shape = (800, 600)
print('-' * 80)
for each in shape:
    print(each)
    结果:400
300
--------------------------------------------------------------------------------
800
600

4.6 设置代码格式

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

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

4.6.1 格式设置指南

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

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

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

4.6.2 缩进

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

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

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

4.6.3 行长

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

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

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

4.6.4 空行

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

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

4.6.5 其他格式设置指南

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

练习4-14:PEP 8

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

练习4-15:代码审核

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

  • 每级缩进都使用四个空格。对你使用的文本编辑器进行设 置,使其在你按Tab键时插入四个空格。如果你还没有这 样做,现在就去做吧(有关如何设置,请参阅附录B)。
  • 每行都不要超过80字符。对你使用的编辑器进行设置,使 其在第80个字符处显示一条垂直参考线。
  • 不要在程序文件中过多使用空行。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321236.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号