前言
在Python生态系统中,各种包轮番登场,各种编码实践大行其道后又日渐式微。
引言
Python是什么?为何要使用它?官方宣传说:Python是一种面向对象的解释性高级编程语言,具有动态语义。
这句话的要点在于,Python是一种知道如何不妨碍你编写程序的编程语言。它让你能够毫无困难地实现所需的功能,还让你能够编写出清晰易懂的程序。
Python广泛用于完成系统管理任务(例如,它是多个Linux发行版的重要组成部分),也被用来向新手介绍编程。
本书是为有志于学习Python编程的人写的,适合从编程门外汉到计算机高手的各种读者阅读。如果你没有任何编程经验,应从第1章开始阅读,阅读到看不懂的内容后,开始动手编写一些程序。等到条件成熟后,再回过头来继续阅读更复杂的内容。
目录
第1章 快速上手:基础知识👉本文剩余部分
第2章 列表和元组👉https://blog.csdn.net/holeer/article/details/146065683
第3章 使用字符串👉见上
第4章 当索引行不通时(字典)👉见上
第5章 条件、循环及其他语句👉https://blog.csdn.net/holeer/article/details/146063043
第6章 抽象(函数)👉https://blog.csdn.net/holeer/article/details/146039370
第7章 再谈抽象(面向对象编程)👉https://blog.csdn.net/holeer/article/details/146039498
第8章 异常👉https://blog.csdn.net/holeer/article/details/146017146
第9章 魔法方法、特性和迭代器👉https://blog.csdn.net/holeer/article/details/146014690
第10章 开箱即用(模块)👉https://blog.csdn.net/holeer/article/details/145996542
第11章 文件👉https://blog.csdn.net/holeer/article/details/145987876
第12章 图形用户界面
第13章 数据库支持👉https://blog.csdn.net/holeer/article/details/145980186
第14章 网络编程
第15章 Python和Web
第16章 测试基础👉https://blog.csdn.net/holeer/article/details/145970034
第17章 扩展Python
第18章 程序打包👉https://blog.csdn.net/holeer/article/details/145708590
第19章 趣味编程
第20章 项目1:自动添加标签
第21章 项目2:绘制图表
第22章 项目3:万能的XML
第23章 项目4:新闻汇总
第24章 项目5:虚拟茶话会
第25章 项目6:使用CGI进行远程编辑
第26章 项目7:自建公告板
第27章 项目8:使用XML-RPC共享文件
第28章 项目9:使用GUI共享文件
第29章 项目10:自制街机游戏
附录A 简明教程👉https://blog.csdn.net/holeer/article/details/146185954
附录B Python参考手册👉https://blog.csdn.net/holeer/article/details/146186015
第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节将介绍如何这样做。
1.7 函数
函数犹如小型程序,可用来执行特定的操作,比如下面的例子:
>>> 2 ** 3
8
>>> pow(2,3)
8
Python提供了很多内置函数。像前一个示例那样使用函数称为调用函数:你向它提供实参,而它返回一个值。鉴于函数调用返回一个值,因此它们也是表达式。
有多个内置函数可用于编写数值表达式。例如,abs计算绝对值,round将浮点数圆整为与之最接近的整数。
1.8 模块
可将模块视为扩展,通过将其导入可以扩展Python功能。要导入模块,可使用特殊命令import。
下面是一个导入math模块并使用其中的向下取整函数floor的示例。(向上取整函数为ceil)
>>> import math
>>> math.floor(32.9)
32
这里调用函数的方式是module.function
。
如果确定不会从不同模块导入多个同名函数,你可能不想每次调用函数时都指定模块名。在这种情况下,可使用命令import的如下变种:from module import function
,如下面的示例所示。
>>> from math import sqrt
>>> sqrt(9)
3.0
【提示】事实上,可使用变量来引用函数(以及其他大部分Python元素)。执行赋值语句foo = math.sqrt
后,就可使用foo来计算平方根。例如,foo(4)的结果为2.0。
1.9 保存并执行程序
交互式解释器是Python的亮点之一,它让你能够实时地测试解决方案。然而,等你退出交互式解释器时,你在其中编写的所有代码都将丢失。编程的终极目标应该是编写自己和他人都能运行的程序。
Python程序文件的扩展名是.py
,它实际上是一个纯文本文件。在写好程序之后,你需要保存文件并指定一个合适的文件名。
1.9.1 从终端运行Python脚本
如果在终端内执行python命令没有报错,且脚本在终端的工作目录中,则可以使用以下命令执行Python脚本:python hello.py
。
1.9.2 把脚本变成普通程序
在有些情况下,你希望能够像执行其他程序一样执行Python脚本(即输入程序名运行程序),而无需显式地使用Python解释器。
UNIX提供了实现这种目标的标准方式:
(1)让脚本的第一行以字符序列#!开始,并在它后面指定解释器的绝对路径。最简单的示例(使用全局默认Python解释器):#!/usr/bin/env python
。
(2)将脚本设置为可执行的:chmod a+x hello.py
(3)将脚本作为程序执行:hello.py
或./hello.py
。你还可以去掉文件名中的.py,使其看起来更像普通程序。
在Windows中,用户通常通过双击运行程序,因此扩展名.py是让脚本像普通程序一样的关键所在。在这种情况下,通常建议在脚本末尾添加一行input("Press <enter>")
,这样脚本运行完成之后不会立即关闭窗口。
1.9.3 注释
在Python代码中,井号(#)后面到行尾的所有内容都将被忽略。
在任何情况下,都应确保代码即便没有注释也易于理解。
1.10 字符串
字符串用途众多,但主要用途是表示一段文本。比如在代码print("Hello, world!")
中,"Hello, world!"就是一个字符串。
你也可以用单引号将字符串括起,但是在这样的字符串中表示单引号字符需要使用反斜杠。
可以使用+
运算符拼接两个字符串。
>>> "Hello, " + "world!"
'Hello, world!'
>>> x = "Hello, "
>>> y = "world!"
>>> x + y
'Hello, world!'
1.10.4 长字符串、原始字符串和字节
有一些独特而有用的字符串表示方式。
(1)长字符串
要表示很长的字符串(跨越多行的字符串),可使用三引号(单双均可)。在两对三引号中使用单引号或双引号时,无需使用反斜杠转义。
print('''This is a very long string. It continues here.
And it's not over yet. "Hello, world!"
Still here.''')
【提示】常规字符串也可横跨多行,在行尾加上反斜杠即可。这种处理手法也适用于表达式和语句。
(2)原始字符串
在普通字符串之前加上前缀r,就得到了原始字符串。原始字符串在输出时不会进行任何转义处理,而是使字符串中的每个字符都保持原样。注意,原始字符串不能以单个反斜杠结尾。