前言
在Python生态系统中,各种包轮番登场,各种编码实践大行其道后又日渐式微。
引言
Python是什么?为何要使用它?官方宣传说:Python是一种面向对象的解释性高级编程语言,具有动态语义。
这句话的要点在于,Python是一种知道如何不妨碍你编写程序的编程语言。它让你能够毫无困难地实现所需的功能,还让你能够编写出清晰易懂的程序。
Python广泛用于完成系统管理任务(例如,它是多个Linux发行版的重要组成部分),也被用来向新手介绍编程。
本书是为有志于学习Python编程的人写的,适合从编程门外汉到计算机高手的各种读者阅读。如果你没有任何编程经验,应从第1章开始阅读,阅读到看不懂的内容后,开始动手编写一些程序。等到条件成熟后,再回过头来继续阅读更复杂的内容。
参考实验环境
硬件环境:阿里云主机
操作系统:Ubuntu 22.04(一种Linux稳定发行版)
代码仓库:待开源
第1章 快速上手:基础知识
1.1 交互式解释器
如果你使用的是macOS或Linux,请打开终端,输入python并按回车键。你将看到一条欢迎消息,如下图所示。
具体的安装步骤视使用的操作系统和安装方式而异,但最简单的方法是访问www.python.org,其中有下载页面的链接。
这是一个交互式Python解释器。请尝试像下面这样做,以核实它是否管用:
如果你熟悉其他计算机语言,可能习惯了在每行末尾都加上分号。在Python中无需这样做,因为在Python中,一行就是一行。
你可能不知道>>>
是什么。在Python解释器中,>>>
是提示符,可在它后面输入一些内容。解释器对其进行处理后,会输出一些反馈信息,然后你可以继续输入。因此,Python解释器就是初学者学习Python最好的老师,因为编程的实践性很强,交互对话式学习是最好的学习方式。
如果随便输入一些东西呢?请看下图。
显然,解释器没有看懂。解释器还指出了问题出在什么地方,下面逐行解释。
>>> The Spanish Inquisition ----- 你的输入
File "<stdin>", line 1 ----- 问题出在输入的第一行
The Spanish Inquisition ----- 用^标出出错的具体位置
^^^^^^^
SyntaxError: invalid syntax ----- 语法错误:无效语法
显然,问题在于语法错误。正如人讲话需要遵循一定的逻辑,与计算机交流也需要遵循一定的语法。
程序运行出错是很正常的事情,对此需要一分为二地看待:计算机的优点在于能提供即时反馈,程序出错会带来挫败感,修复错误的过程具有挑战性,使用计算机成功解决问题很有成就感。
1.2 算法是什么
简而言之,计算机编程就是告诉计算机如何做。计算机多才多艺,但不太善于独立思考,我们必须提供详尽的细节,使用它们能够明白的语言将算法提供给它们。算法只不过是流程或菜谱的时髦说法,详尽地描述了如何完成某项任务。正如烹饪需要各种原料和步骤,算法也需要用各种原料和步骤来描述。
下面首先介绍一些非常简单的Python原料,看看可以对它们做些什么。以下表格中的“输入”和“输出”都是相对于Python解释器而言的。
1.3 数和表达式
运算符 | 输入 | 输出 |
---|---|---|
/ | 1/2 | 0.5 |
/ | 1/1 | 1.0 |
// | 1//2 | 0 |
// | 1//1 | 1 |
// | 5.0//2.4 | 2.0 |
% | 1%2 | 1 |
% | 10%3 | 1 |
% | 9%3 | 0 |
% | 2.75%0.5 | 0.25 |
** | 2 ** 3 | 8 |
** | -3 ** 2 | -9 |
** | (-3) ** 2 | 9 |
在以上的表格中,斜杠/
为实数除,双斜杠//
为整除(相当于实数除再去尾),百分号%
为取余,**
为幂运算。注意,以上运算存在优先级:括号内>幂>乘除>加减。在运算符前后加上空格是很好的编程习惯,有时候适当添加括号可以使语义更加清晰。
有时候我们需要用到十六进制数、八进制数和二进制数,如以下表格所示。
进制 | 前缀 | 输入 | 输出 |
---|---|---|---|
十六 | 0x | 0xAF | 175 |
八 | 0o | 0x10 | 8 |
二 | 0b | 0b1011010010 | 722 |
1.4 变量
变量是表示(或指向)特定值的名称。下面举例说明。
上图中,x=3为赋值语句,x*2为运算表达式。
不同于其他一些语言,使用Python变量前必须给它赋值,因为Python变量没有默认值。这里体现的原则是:先赋值,后使用。
【注意】在Python中,**名称(标识符)**只能由字母、数字和下划线(_)构成,且不能以数字打头。因此Plan9
是合法的变量名,而9Plan不是。
1.5 语句
表达式是一些东西,而语句做一些事情。例如,2*2
的结果是4,而print(2 * 2)
打印4。表达式和语句的行为很像,因此它们之间的界线可能并非那么明确。
在交互式解释器中执行时,这两段代码的结果没有任何差别,但这是因为解释器总是将表达式的值打印出来。然而,在Python中,情况并非都是这样的。本章后面将介绍如何创建无需交互式解释器就能运行的程序。仅将诸如2 * 2
等表达式放在程序中不会有任何作用,但在程序中包含print(2 * 2)
将打印结果4。
涉及赋值时,语句和表达式的差别更明显:鉴于赋值语句不是表达式,它们没有可供交互式解释器打印的值。
执行赋值语句后,交互式解释器只是再次显示提示符,但发生了一些变化:有一个名为x的新变量,与值3相关联。可以说,这是所有语句的一个根本特征:执行修改操作。例如,赋值语句改变变量,而print语句改变屏幕的外观。变量就像是临时“存储区”(类似于菜谱中的锅碗瓢盆),其真正威力在于无需知道它们存储的值就能操作它们。
例如,即便根本不知道x和y是什么,你也知道x * y的结果为x和y的乘积。因此,编写程序时,你能以各种方式使用变量,而无需知道程序运行时它们将存储(指向)的值。
1.6 获取用户输入
你编写的程序可能供他人使用,无法预测用户会向程序提供什么样的值。
下面看看很有用的函数input。
下面是一个更有趣的示例。
对于上述在Python提示符(>>>)下输入的语句,可将其放在完整的程序中,并让用户提供所需的值(34和42)。这样,这个程序将打印结果1428,即前述两个数的乘积。
【注意】将程序存储在独立的文件中,让其他用户能够执行时,这种获取输入的方式将有用得多。1.8节将介绍如何这样做。