带你迅速搞定Python编程-第 2 章 变量和简单的数据类型

带你迅速搞定Python编程-第 2 章 变量和简单的数据类型

在本章中,你将学习可在 Python 程序中使用的各种数据类型,还将学习如何在程序中使用变量来表示这些数据类型。

2.1 运行 hello_world.py 时发生的情况

当你运行 hello_world.py 时,Python 都做了些什么呢?下面来深入研究一下。实际上,即便是运行简单的程序,Python 所做的工作也相当多:

hello_world.py

print("Hello Python world!")

运行上述代码,你将看到如下输出:

Hello Python world!

在运行文件 hello_world.py 时,末尾的 .py 指出这是一个 Python 程序,因此编辑器将使用 Python 解释器来运行它。Python 解释器读取整个程序,确定其中每个单词的含义。例如,在看到后面跟着括号的单词 print 时,解释器就会将括号中的内容打印到屏幕上。

当你编写程序时,编辑器会以各种高亮方式突出显示程序的不同部分。例如,它知道 print() 是一个函数的名称,因此将其显示为某种颜色;它知道 “Hello Python world!” 不是 Python 代码,因此将其显示为另一种颜色。这种功能称为语法高亮,在你刚开始编写程序时很有帮助。

2.2 变量

下面来尝试在 hello_world.py 中使用一个变量。在这个文件开头添加一行代码,并对第二行代码进行修改,如下所示:

hello_world.py

message = "Hello Python world!"
print(message)

运行这个程序,看看结果如何。你会发现,输出与以前相同:

Hello Python world!

我们添加了一个名为 message 的变量(variable)。每个变量指向一个值(value)——与该变量相关联的信息。在这里,指向的值为文本 “Hello Python world!”。

添加变量会使 Python 解释器需要做更多工作。在处理第一行代码时,它将变量 message 与文本 “Hello Python world!” 关联起来;在处理第二行代码时,它将与变量 message 关联的值打印到屏幕上。

下面来进一步扩展这个程序:修改 hello_world.py,使其再打印一条消息。为此,在 hello_world.py 中添加一个空行,再添加两行代码:

message = "Hello Python world!"
print(message)

message = "Hello Python Crash Course world!"
print(message)

现在运行这个程序,将看到两行输出:

Hello Python world!
Hello Python Crash Course world!

在程序中,可随时修改变量的值,而 Python 将始终记录变量的最新值。

2.2.1 变量的命名和使用

在 Python 中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解。在使用变量时,务必牢记下述规则。

变量名只能包含字母、数字和下划线1。变量名能以字母或下划线打头,但不能以数字打头。例如,可将变量命名为 message_1,但不能将其命名为 1_message。
变量名不能包含空格,但能使用下划线来分隔其中的单词。例如,变量名 greeting_message 可行,但变量名 greeting message 会引发错误。
不要将 Python 关键字和函数名用作变量名。例如,不要将 print 用作变量名,因为它被 Python 留作特殊用途(请参见附录 A.4)。
变量名应既简短又具有描述性。例如,name 比 n 好,student_name 比 s_n 好,name_length 比 length_of_persons_name 好。
慎用小写字母 l 和大写字母 O,因为它们可能被人错看成数字 1 和 0。
1在 Python 3 中,变量名还可以包含其他 Unicode 字符。例如,中文字符也是支持的,但是不推荐。——编者注

学习创建良好的变量名需要一定的实践,特别是当程序变得更加有趣和复杂的时候。随着你编写越来越多的程序,并开始阅读别人编写的代码,你将越来越善于创建有意义的变量名。

注意:就目前而言,应使用小写的 Python 变量名。虽然在变量名中使用大写字母不会导致错误,但大写字母在变量名中有特殊的含义,这将在本书后面讨论。

2.2.2 如何在使用变量时避免命名错误

程序员都会犯错,而且大多数程序员每天都会犯错。虽然优秀的程序员也会犯错,但他们知道如何高效地排除错误。下面来看一种你可能犯的错误,并学习如何排除它。

我们将有意地编写一些会引发错误的代码。请输入下面的代码,包括其中拼写不正确、以粗体显示的单词 mesage:

message = "Hello Python Crash Course reader!"
print(mesage)

当程序存在错误时,Python 解释器将竭尽所能地帮助你找出问题所在。如果程序无法成功地运行,解释器将提供一个 traceback。traceback 是一条记录,指出了解释器在尝试运行代码时,在什么地方陷入了困境。下面是当你不小心错误地拼写了变量名时,Python 解释器提供的 traceback:

Traceback (most recent call last):
❶   File "hello_world.py", line 2, in <module>print(mesage)
            ^^^^^^
❸ NameError: name 'mesage' is not defined. Did you mean: 'message'?

解释器指出,文件 hello_world.py 的第二行存在错误(见❶)。它列出了这行代码,旨在帮助你快速找出错误(见❷),并且指出了它发现的是什么样的错误(见❸)。在这里,解释器发现了一个名称错误,并报告打印的变量 mesage 未定义:Python 无法识别你提供的变量名。名称错误通常意味着两种情况:要么在使用变量前忘记了给它赋值,要么在输入变量名时拼写不正确。在遇到不能识别的变量时,Python 如果发现其名称与另一个变量类似,将询问你指的是不是后者。

在这个示例中,第二行中的变量名 message 遗漏了字母 s。Python 解释器不会对代码做拼写检查,但要求变量名的拼写一致。例如,如果在定义变量的地方也将 message 错误地拼写成了 mesage,结果将如何呢?

mesage = "Hello Python Crash Course reader!"
print(mesage)

在这种情况下,程序将成功地运行:

Hello Python Crash Course reader!

变量名是一致的,因此在 Python 看来,这不是问题。编程语言要求严格,但不关心拼写是否正确。因此,在创建变量名和编写代码时,无须考虑英语中的拼写和语法规则。

很多编程错误很简单,只是在程序的某一行输错了一个字符。为了找出这种错误而花费很长时间的大有人在。很多程序员天资聪颖、经验丰富,却会为找出这种细微的错误花费数小时时间。你大可对此冷嘲热讽,但别忘了,你在编程生涯中,经常会有同样的遭遇。

2.2.3 变量是标签

变量常被描述为可用于存储值的盒子。在你刚接触变量时,这种定义很有帮助,但它并没有准确地描述 Python 内部表示变量的方式。一种好得多的定义是,变量是可以被赋值的标签,也可以说变量指向特定的值。

在刚学习编程时,这种差别对你而言可能意义不大,但越早知道越好。你迟早会遇到变量的行为出乎意料的情形,对变量的工作原理有准确的认识,将有助于你明白代码是如何运行的。

注意:要理解新的编程概念,最佳方式是尝试在程序中使用它们。如果你在完成本书的练习时陷入了困境,请尝试做点儿其他的事情。如果这样依然无法摆脱困境,请复习相关的内容。如果此时情况依然如故,请参阅附录 C 提供的建议。

动手试一试

在完成下面的每个练习时,都编写一个独立的程序。在保存每个程序时,使用符合标准 Python 约定的文件名:使用小写字母和下划线,如 simple_message.py 和 simple_messages.py。

练习 2.1:简单消息 将一条消息赋给变量,并将其打印出来。

练习 2.2:多条简单消息 将一条消息赋给变量,并将其打印出来;再将变量的值修改为一条新消息,并将其打印出来。

2.3 字符串

大多数程序会定义并收集某种数据,然后使用它们来做些有意义的事情。因此,对数据分类大有裨益。我们将介绍的第一种数据类型是字符串。字符串虽然看似简单,但能够以很多不同的方式使用。

字符串(string)就是一系列字符。在 Python 中,用引号引起的都是字符串,其中的引号可以是单引号,也可以是双引号:

"This is a string."
'This is also a string.'

这种灵活性让你能够在字符串中包含引号和撇号:

'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."

下面来看一些使用字符串的方式。

2.3.1 使用方法修改字符串的大小写

对于字符串,可执行的最简单的操作之一是,修改其中单词的大小写。请看下面的代码,并尝试判断其作用:

name.py

name = "ada lovelace"
print(name.title())

将这个文件保存为 name.py,再运行它。你将看到如下输出:

Ada Lovelace

在这个示例中,变量 name 指向全小写的字符串 “ada lovelace”。在函数调用 print() 中,title() 方法出现在这个变量的后面。方法(method)是 Python 可对数据执行的操作。在 name.title() 中,name 后面的句点(.)让 Python 对 name 变量执行 title() 方法指定的操作。每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成工作。这种信息是在括号内提供的。title() 函数不需要额外的信息,因此它后面的括号是空的。

title() 方法以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序将值 Ada、ADA 和 ada 视为同一个名字,并将它们都显示为 Ada。

还有其他几个很有用的大小写处理方法。例如,要将字符串改为全大写或全小写的,可以像下面这样做:

name = "Ada Lovelace"
print(name.upper())
print(name.lower())

这些代码的输出如下:

ADA LOVELACE
ada lovelace

在存储数据时,lower() 方法很有用。用户通常不能像你期望的那样提供正确的大小写,因此需要将字符串先转换为全小写的再存储。以后需要显示这些信息时,再将其转换为最合适的大小写方式即可。

2.3.2 在字符串中使用变量

在一些情况下,你可能想在字符串中使用变量的值。例如,你可能想使用两个变量分别表示名和姓,再合并这两个值以显示姓名:

full_name.py

  first_name = "ada"
  last_name = "lovelace"
❶ full_name = f"{first_name} {last_name}"
  print(full_name)

要在字符串中插入变量的值,可先在左引号前加上字母 f(见❶),再将要插入的变量放在花括号内。这样,Python 在显示字符串时,将把每个变量都替换为其值。

这种字符串称为 f 字符串。f 是 format(设置格式)的简写,因为 Python 通过把花括号内的变量替换为其值来设置字符串的格式。上述代码的输出如下:

ada lovelace

使用 f 字符串可以完成很多任务,如利用与变量关联的信息来创建完整的消息,如下所示:

 first_name = "ada"
  last_name = "lovelace"
  full_name = f"{first_name} {last_name}"print(f"Hello, {full_name.title()}!")

这里,在一个问候用户的句子中使用了完整的姓名(见❶),并使用 title() 方法来将姓名设置为合适的格式。这些代码将显示一条格式良好的简单问候语:

Hello, Ada Lovelace!

还可以使用 f 字符串来创建消息,再把整条消息赋给变量:

  first_name = "ada"
  last_name = "lovelace"
  full_name = f"{first_name} {last_name}"
❶ message = f"Hello, {full_name.title()}!"print(message)

上述代码也显示消息“Hello, Ada Lovelace!”,但将这条消息赋给了一个变量(见❶),这让最后的函数调用 print() 简单得多(见❷)。

2.3.3 使用制表符或换行符来添加空白

在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。你可以使用空白来组织输出,让用户阅读起来更容易。

要在字符串中添加制表符,可使用字符组合 \t:

>>> print("Python")
Python
>>> print("\tPython")
    Python

要在字符串中添加换行符,可使用字符组合 \n:

>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript

还可以在同一个字符串中同时包含制表符和换行符。字符串 “\n\t” 让 Python 换到下一行,并在下一行开头添加一个制表符。下面的示例演示了如何使用单行字符串来生成 4 行输出:

>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
    Python
    C
    JavaScript

在接下来的两章中,你将使用寥寥几行代码来生成很多行输出,届时制表符和换行符将提供极大的帮助。

2.3.4 删除空白

在程序中,额外的空白可能令人迷惑。对程序员来说,‘python’ 和 'python ’ 看起来几乎没什么两样,但对程序来说,它们是两个不同的字符串。Python 能够发现 'python ’ 中额外的空白,并认为它意义重大——除非你告诉它不是这样的。

空白很重要,因为你经常需要比较两个字符串是否相同。例如,一个重要的示例是,在用户登录网站时检查其用户名。即使在非常简单的情形下,额外的空白也可能令人迷惑。所幸,在 Python 中删除用户输入数据中多余的空白易如反掌。

Python 能够找出字符串左端和右端多余的空白。要确保字符串右端没有空白,可使用 rstrip() 方法。

>>> favorite_language = 'python '>>> favorite_language
  'python '>>> favorite_language.rstrip()
  'python'>>> favorite_language
  'python '

与变量 favorite_language 关联的字符串右端有多余的空白(见❶)。当你在终端会话中向 Python 询问这个变量的值时,可看到末尾的空格(见❷)。对变量 favorite_language 调用 rstrip() 方法后(见❸),这个多余的空格被删除了。然而,这种删除只是暂时的,如果再次询问 favorite_ language 的值,这个字符串会与输入时一样,依然包含多余的空白(见❹)。

要永久删除这个字符串中的空白,必须将删除操作的结果关联到变量:

 >>> favorite_language = 'python '>>> favorite_language = favorite_language.rstrip()
  >>> favorite_language
  'python'

为删除这个字符串中的空白,你将其右端的空白删除,再将结果关联到原来的变量(见❶)。在编程中,经常需要修改变量的值,再将新值关联到原来的变量。这就是变量的值可能随程序的运行或用户的输入数据发生变化的原因所在。

还可以删除字符串左端的空白或同时删除字符串两端的空白,分别使用 lstrip() 方法和 strip() 方法即可:

>>> favorite_language = ' python '>>> favorite_language.rstrip()
  ' python'>>> favorite_language.lstrip()
  'python '>>> favorite_language.strip()
  'python'

在这个示例中,我们首先创建了一个开头和末尾都有空白的字符串(见❶)。接下来,分别删除右端(见❷)、左端(见❸)和两端(见❹)的空白。尝试使用这些剥除(strip)函数,有助于你熟悉字符串操作。在实际程序中,这些函数最常用于在存储用户输入前对其进行清理。

2.3.5 删除前缀

另一个常见的字符串处理任务是删除前缀。假设有一个 URL 包含常见的前缀 https://,而你想删除这个前缀,只关注用户需要输入地址栏的部分。下面演示了如何完成这项任务:

>>> nostarch_url = 'https://nostarch.com'
>>> nostarch_url.removeprefix('https://')
'nostarch.com'

这里在变量名后面加上了句点和 removeprefix() 方法,并且在括号内输入了要从原始字符串中删除的前缀。

与删除空白的方法一样,removeprefix() 也保持原始字符串不变。如果想保留删除前缀后的值,既可将其重新赋给原来的变量,也可将其赋给另一个变量:

>>> simple_url = nostarch_url.removeprefix('https://')

如果你在地址栏中看到不包含 https:// 部分的 URL,可能是浏览器在幕后使用了类似于 removeprefix() 的方法。

2.3.6 如何在使用字符串时避免语法错误

语法错误是一种你会不时遇到的错误。当程序包含非法的 Python 代码时,就会导致语法错误。例如,在用单引号引起的字符串中包含撇号,就将导致错误。这是因为这会导致 Python 将第一个单引号和撇号之间的内容视为一个字符串,进而将余下的文本视为 Python 代码,从而引发错误。

下面演示了如何正确地使用单引号和双引号。请先将该程序保存为 apostrophe.py 再运行:

apostrophe.py

message = "One of Python's strengths is its diverse community."
print(message)

撇号位于两个双引号之间,因此 Python 解释器能够正确地理解这个字符串:

One of Python’s strengths is its diverse community.
然而,如果使用单引号,Python 将无法正确地确定字符串的结束位置:

message = 'One of Python's strengths is its diverse community.'
print(message)

你将看到如下输出:

  File "apostrophe.py", line 1
    message = 'One of Python's strengths is its diverse community.'
                                                                ❶ ^
SyntaxError: unterminated string literal (detected at line 1)

从上述输出可知,错误发生在最后一个单引号后面(见❶)。在解释器看来,这种语法错误表明一些内容不是有效的 Python 代码,原因是没有正确地使用引号将字符串引起来。错误的原因各种各样,我将指出一些常见的原因。在学习编写 Python 代码时,你可能经常遇到语法错误。语法错误也是最不具体的错误类型,因此可能难以找出并修复。当受困于非常棘手的错误时,请参阅附录 C 提供的建议。

注意:在编写程序时,编辑器的语法高亮功能可帮助你快速找出某些语法错误。如果看到 Python 代码以普通句子的颜色显示,或者普通句子以 Python 代码的颜色显示,就可能意味着文件中存在引号不匹配的情况。

动手试一试

在完成下面的每个练习时,都编写一个独立的程序,并将其保存到名称类似于 name_cases.py 的文件中。如果遇到困难,请休息一会儿或参阅附录 C 提供的建议。

练习 2.3:个性化消息 用变量表示一个人的名字,并向其显示一条消息。显示的消息应非常简单,如下所示。

Hello Eric, would you like to learn some Python today?

练习 2.4:调整名字的大小写 用变量表示一个人的名字,再分别以全小写、全大写和首字母大写的方式显示这个人名。

练习 2.5:名言 1 找到你钦佩的名人说的一句名言,将这个名人的姓名和名言打印出来。输出应类似于下面这样(包括引号)。

Albert Einstein once said, “A person who never made a mistake never tried anything new.”

练习 2.6:名言 2 重复练习 2.5,但用变量 famous_person 表示名人的姓名,再创建要显示的消息并将其赋给变量 message,然后打印这条消息。

练习 2.7:删除人名中的空白 用变量表示一个人的名字,并在其开头和末尾都包含一些空白字符。务必至少使用字符组合 “\t” 和 “\n” 各一次。

打印这个人名,显示其开头和末尾的空白。然后,分别使用函数 lstrip()、rstrip() 和 strip() 对人名进行处理,并将结果打印出来。

练习 2.8:文件扩展名 Python 提供了 removesuffix() 方法,其工作原理与 removeprefix() 很像。请将值 ‘python_notes.txt’ 赋给变量 filename,再使用 removesuffix() 方法来显示不包含扩展名的文件名,就像文件浏览器所做的那样。

2.4 数

在编程中,经常使用数(number)来记录得分,表示可视化数据,存储信息,等等。Python 根据数的用法以不同的方式处理它们。鉴于整数使用起来最简单,下面就先来看看 Python 是如何管理它们的。

2.4.1 整数

在 Python 中,可对整数(integer)执行加(+)减(-)乘(*)除(/)运算。

>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5

在终端会话中,Python 直接返回运算结果。Python 使用两个乘号(**)表示乘方运算:

>>> 3 ** 2
9
>>> 3 ** 3
27
>>> 10 ** 6
1000000

Python 还支持运算顺序,因此可以在同一个表达式中使用多种运算。还可以使用括号来调整运算顺序,让 Python 按你指定的顺序执行运算,如下所示:

>>> 2 + 3*4
14
>>> (2 + 3) * 4
20

在这些示例中,空格不影响 Python 计算表达式的方式。它们旨在让你在阅读代码时,能迅速确定将先执行哪些运算。

2.4.2 浮点数

Python 将带小数点的数称为浮点数(float)。大多数编程语言使用了这个术语,它指出了这样一个事实:小数点可出现在数的任何位置上。每种编程语言都必须细心设计,以妥善地处理浮点数,确保不管小数点出现在什么位置上,数的运算都是正确的。

从很大程度上说,使用浮点数时无须考虑其行为。你只需输入要使用的数,Python 通常会按你期望的方式处理它们:

>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2
0.4
>>> 2 * 0.1
0.2
>>> 2 * 0.2
0.4

需要注意的是,结果包含的小数位数可能是不确定的:

>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004

所有编程语言都存在这种问题,没有什么可担心的。Python 会尽力找到一种精确地表示结果的方式,但鉴于计算机内部表示数字的方式,这在有些情况下很难。就现在而言,暂时忽略多余的小数位数即可。在本书第二部分的项目中,你将在需要时学习处理多余小数位的方式。

2.4.3 整数和浮点数

将任意两个数相除,结果总是浮点数,即便这两个数都是整数且能整除:

>>> 4/2
2.0

在其他任何运算中,如果一个操作数是整数,另一个操作数是浮点数,结果也总是浮点数:

>>> 1 + 2.0
3.0
>>> 2 * 3.0
6.0
>>> 3.0 ** 2
9.0

在 Python 中,无论是哪种运算,只要有操作数是浮点数,默认得到的就总是浮点数,即便结果原本为整数。

2.4.4 数中的下划线

在书写很大的数时,可使用下划线将其中的位分组,使其更清晰易读:

>>> universe_age = 14_000_000_000

当你打印这种使用下划线定义的数字时,Python 不会打印其中的下划线:

>>> print(universe_age)
14000000000

这是因为在存储这种数时,Python 会忽略其中的下划线。在对数字位分组时,即便不是将每三位分成一组,也不会影响最终的值。在 Python 看来,1000 与 1_000 没什么不同,1_000 与 10_00 也没什么不同。这种表示法既适用于整数,也适用于浮点数。

2.4.5 同时给多个变量赋值

可在一行代码中给多个变量赋值,这有助于缩短程序并提高其可读性。这种做法最常用于将一系列数赋给一组变量。

例如,下面演示了如何将变量 x、y 和 z 都初始化为零:

>>> x, y, z = 0, 0, 0

在这样做时,需要用逗号将变量名分开;对于要赋给变量的值,也需要做同样的处理。Python 将按顺序将每个值赋给对应的变量。只要变量数和值的个数相同,Python 就能正确地将变量和值关联起来。

2.4.6 常量

常量(constant)是在程序的整个生命周期内都保持不变的变量。Python 没有内置的常量类型,但 Python 程序员会使用全大写字母来指出应将某个变量视为常量,其值应始终不变:

MAX_CONNECTIONS = 5000
在代码中,要指出应将特定的变量视为常量,可将其变量名全大写。

动手试一试

练习 2.9:数字 8 编写 4 个表达式,分别使用加法、减法、乘法和除法运算,但结果都是数字 8。为了使用函数调用 print() 来显示结果,务必将这些表达式用括号括起来。也就是说,你应该编写 4 行类似于这样的代码:

print(5+3)
输出应为 4 行,其中每行都只包含数字 8。

练习 2.10:最喜欢的数 用一个变量来表示你最喜欢的数,再使用这个变量创建一条消息,指出你最喜欢的数是什么,然后将这条消息打印出来。

2.5 注释

在大多数编程语言中,注释是一项很有用的功能。本书前面编写的程序都只包含 Python 代码,但随着程序越来越大、越来越复杂,就应该在其中添加说明,对你解决问题的方式进行大致的阐述。注释(comment)让你能够使用自然语言在程序中添加说明。

2.5.1 如何编写注释

在 Python 中,注释用井号(#)标识。井号后面的内容都会被 Python 解释器忽略,如下所示:

comment.py

# 向大家问好
print("Hello Python people!")

Python 解释器将忽略第一行,只执行第二行。

Hello Python people!

2.5.2 该编写什么样的注释

编写注释的主要目的是阐述代码要做什么,以及是如何做的。在开发项目期间,你对各个部分如何协同工作了如指掌,但是一段时间过后,你可能会忘记一些细节。当然,你总是可以通过研究代码来确定各个部分的工作原理,但通过编写注释以清晰的自然语言对解决方案进行概述,可以节省很多时间。

要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。当前,大多数软件是合作编写而成的,编写者既可能是同一家公司的多名员工,也可能是众多致力于同一个开源项目的人。训练有素的程序员都希望代码中包含注释,因此你最好从现在开始就在程序中添加描述性注释。新手程序员最值得养成的习惯之一就是,在代码中编写清晰、简洁的注释。

如果不确定是否要编写注释,就问问自己:在找到合理的解决方案之前,考虑了多个解决方案吗?如果答案是肯定的,就编写注释,对你的解决方案进行说明吧。相比以后再回头添加注释,删除多余的注释要容易得多。从现在开始,本书的示例都将使用注释来阐述代码的工作原理。

动手试一试

练习 2.11:添加注释 选择你编写的两个程序,在每个程序中至少添加一条注释。如果程序太简单,实在没有什么需要说明的,就在程序文件开头加上你的姓名和当前日期,再用一句话阐述程序的功能。

2.6 Python 之禅

经验丰富的程序员倡导尽可能避繁就简。Python 社区的理念都包含在 Tim Peters 撰写的“Python 之禅”中,要了解这些有关编写优秀 Python 代码的指导原则,只需在解释器中执行命令 import this。这里不打算列出全部的“Python 之禅”,只想分享其中的几条原则,让你明白为何它们对 Python 新手来说至关重要。

>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.

Python 程序员笃信代码可以编写得漂亮而优雅。编程是要解决问题的,设计良好、高效而漂亮的解决方案会让程序员心生敬意。随着你对 Python 的认识越来越深入,并使用它来编写越来越多的代码,总有一天也会有人站在你身后惊呼:“哇,代码写得真是漂亮!”

Simple is better than complex.
如果有两个解决方案,一个简单、一个复杂,但都行之有效,就选择简单的解决方案吧。这样,你编写的代码将更容易维护,你或他人以后也能更容易地改进这些代码。

Complex is better than complicated.
现实是复杂的,有时候可能没有简单的解决方案。在这种情况下,就选择最简单的可行解决方案吧。

Readability counts.
即便是复杂的代码,也要让它易于理解。当开发的项目涉及复杂的代码时,一定要为这些代码编写有益的注释。

There should be one-- and preferably only one --obvious way to do it.
如果让两名 Python 程序员去解决同一个问题,他们提供的解决方案应大致相同。这并不是说编程没有创意空间,而是恰恰相反。大部分编程工作是使用常见的解决方案来解决简单的小问题,而这些小问题往往包含在更庞大、更有创意空间的项目中。在你的程序中,各种具体的细节对其他 Python 程序员来说都应该易于理解。

Now is better than never.
你可以把余生都用来学习 Python 和编程的纷繁难懂之处,但这样完不成任何项目。不要企图编写完美无缺的代码,而是要先编写行之有效的代码,再决定是对其做进一步的改进,还是转而编写新代码。

在你进入下一章,开始研究更复杂的主题时,务必牢记这种简约而清晰的理念。如此,经验丰富的程序员定将对你编写的代码心生敬意,进而乐于向你提供反馈,并与你合作开发有趣的项目。

动手试一试

练习 2.12:Python 之禅 在 Python 终端会话中执行命令 import this,并粗略地浏览一下其他指导原则。

2.7 小结

在本章中,你首先学习了如何使用变量,如何创建描述性变量名,以及如何消除名称错误和语法错误。然后学习了字符串是什么,以及如何使用全小写、全大写和首字母大写的方式显示字符串。你使用空白来显示整洁的输出,还学习了如何删除字符串中多余的字符。你接着学习了如何使用整数和浮点数,了解了一些使用数值数据的方式。你还学习了如何编写说明性注释,让代码对你和其他人来说更容易理解。最后,你了解了让代码尽可能简单的理念。

在第 3 章中,你将学习如何在称为列表的数据结构中存储一系列信息,以及如何通过遍历列表来操作其中的信息。

  • 30
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值