课程介绍
2017年末,Python 在国务院《新一代人工智能发展规划的通知》中被列入教学大纲,一时风头无两。Python 因其在人工智能领域的先天优势,深受欢迎,不难预见,它在未来将大有可为。两年前,因项目需要,作者首次接触 Python,从此便一发不可收,基于 Python 完成了多个项目的开发。一路走来,深感书本与实践脱离之痛,市面上种类繁多的编程辅导书,大都力求面面俱到,动辄数百页,难免令初学者望而生畏。鉴于此,作者推出了本达人课,试图以一种对话的形式,带领读者走进 Python。
本课程是一个系列的 Python 教程,目标是带领读者快速掌握 Python 要义,进而上手实战。
课程从 Python 开发环境搭建开始,随后介绍了 Python 的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句。
然后,循序渐进地介绍了一些相对高级的主题,包括抽象、异常、文件、GUI,网络编程,爬虫等。
此后,探讨了如何将 Python 与数据库、网络、Java 语言、Shell 脚本等工具结合使用。
最后,课程将结合实际应用场景带领读者完成两个小程序的设计和实现。
本课程是作者在学习工作中总结而成,内容循序渐进,语言表述生动,可读性强,认真读完这个系列文章,有助于初学者夯实基础,同时又能帮助程序员提升技能。
作者介绍
应书澜,毕业于 C9 高校,研发出身,曾在阿里巴巴、上海电气、浙能集团、华为等企业的重要项目中担任技术负责人和设计师,现专注于中间件技术。
课程内容
导读:Python 简史
在正式学习 Python 之前,我们应该对以下内容有所了解。
Python 读音
Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。
Python 命名
Python 命名的由来颇具感性色彩,1989年圣诞节期间,在阿姆斯特丹,Guido 为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为 ABC 语言的一种继承。之所以选中 Python(意为大蟒蛇)作为该编程语言的名字,是因为他是一个叫 Monty Python 的喜剧团体的爱好者。
Python 特点
若有人问我 Python 最大的特点是什么,我会毫不犹豫的告诉他:简单易学,功能强大。作为一款纯粹的自由软件,Python 有很多优点:
简单,基于“优雅”、“明确”、“简单”的设计哲学,Python 设计时尽量使用其它语言经常使用的标识符号和英文单词,优秀的 Python 程序具有如同英文般的易读性,这使得学习 Python 变得容易;
高级,Python 是一种高层次的编程语言,与 Java,C/C++ 相比,Python 距离真实的机器更远,它使你能够专注于解决问题而无需考虑诸如如何管理你的程序使用的内存一类的底层实现细节;
易移植,正因为脱离了底层细节的约束,Python 非常易于移植,无需修改便可以在各个平台运行,包括:Linux、Windows、FreeBSD、Macintosh、Solaris、AROS 等等。
解释性,Python 在执行时,首先会将 .py 文件中的源代码编译成 Python 的 Byte Code(字节码),然后再由 Python Virtual Machine(Python 虚拟机)来执行这些编译好的 Byte Code。用户不需要担心如何编译程序,如何确保连接装载正确的库等等。
强大而丰富的库:Python 具有丰富和强大的库,它可以帮助你处理各种工作,包括数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV 文件、密码系统、GUI、Tk 等标准库。除此以外,还有许多高质量的库,如十分经典的科学计算扩展库:NumPy、SciPy 和 matplotlib。
面向对象,Python 既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如 C++ 和 Java 相比,Python 以一种非常强大又简单的方式实现面向对象编程:Python 是完全面向对象的语言,函数、模块、数字、字符串都是对象,并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python 支持重载运算符和动态类型。
可扩充,Python 提供了丰富的 API 和工具,以便程序员能够轻松地使用 C 语言、C++、Cython 来编写扩充模块。Python 编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把 Python 作为一种“胶水语言”(Glue Language)使用。使用 Python 将其他语言编写的程序进行集成和封装。
Python 发展
Python 诞生至今已经成为最受欢迎的程序设计语言之一。自2004年以后,Python 的使用率一直呈线性增长。根据 TIOBE 编程语言社区发布的2018年1月排行榜,Python 已经超过 C# 跃居热门编程语言的第四位。
由于 Python 语言的简洁性、易读性以及可扩展性,在国外用 Python 做科学计算的研究机构日益增多,一些知名大学已经采用 Python 来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用 Python 语言讲授。众多开源的科学计算软件包都提供了 Python 的调用接口,例如著名的计算机视觉库 OpenCV、三维可视化库 VTK、医学图像处理库 ITK。而 Python 专用的科学计算扩展库就更多了,例如十分经典的科学计算扩展库:NumPy、SciPy 和 Matplotlib,它们分别为 Python 提供了快速数组处理、数值运算以及绘图功能。因此 Python 语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
Python 前景
未来是人工智能的时代,有理由相信 Python 将发挥更大的作用。经过多年的演进,人工智能发展进入了新阶段。为抢抓人工智能发展的重大战略机遇:
2017年7月20日,国务院印发了《新一代人工智能发展规划》,提出了面向2030年我国新一代人工智能发展的指导思想、战略目标、重点任务和保障措施。
2017年 10 月 11 日,教育部考试中心发布了“关于全国计算机等级(NCRE)体系调整”的通知,决定自 2018 年 3月起,在计算机二级考试加入了“Python 语言程序设计”科目。
2018年1月16日上午,教育部召开新闻发布会,介绍了《普通高中课程方案和语文等学科课程标准(2017年版)》的有关情况,在此次“新课标”改革中,正式将人工智能、物联网、大数据处理划入新课标,这也就意味着今年秋季入学的高中生,将要开始学习 Python 了。
学习 Python
当前,Python 已经成为人工智能领域最流行的编程语言,而人工智能的火热又反过来促进了 Python 的发展。在国家层面力量的大力推动下,Python 普及的速度定将大大加快,无论是作为辅助工具还是跟随时代步伐,学习 Python 都是很有意义的。
两年前,因项目需要,作者首次接触 Python,从此便一发不可收,基于 Python 完成了一系列项目的开发。一路走来,深感书本与实践脱离之痛,市面上种类繁多的编程辅导书,大都力求面面俱到,动辄数百页,难免令初学者望而生畏。鉴于此,作者写了本课程,试图以一种简明的形式,带领读者走近 Python。
第01课:Python 开发环境搭建及预备知识
特别说明
如果读者已经搭建了 Python 开发环境,可跳过本章第一部分,但需要注意,本课程列举的实例代码中部分有中文注释,有些集成开发环境可能不支持中文注释,因此,运行本课程实例时请注意将注释去掉。另外,如果读者觉得搭建开发环境比较繁琐,可采用 Python 自带的 IDLE 作为开发环境,安装方法请访问:《Python3入门笔记》。
Python 开发环境搭建
开发 Python 的 IDE 有很多,本文介绍基于 Eclipse+PyDev+Python 搭建开发环境的方法。
Eclipse 简介
Eclipse 是一款基于 Java 的可扩展开发平台。其官方下载中包括 J2EE 方向版本、Java 方向版本、C/C++ 方向版本、移动应用方向版本等诸多版本。除此之外,Eclipse 还可以通过安装插件的方式进行诸如 Python、Android、PHP 等语言的开发。本文将要介绍的就是使用 Eclipse 与 PyDev 插件,安装 Python 开发环境的方法。
环境
OS:Windows 7
Python:3.6.2
Java:8u31
Win7 32位,Mac OS 操作系统同下述安装方法。
软件下载
Eclipse 下载
我们可以进入 Eclipse 官网下载界面下载 Eclipse 软件。在该页面,可以看到针对不同开发需求的 Eclipse 版本,本文采用的是 Eclipse IDE for Java and DSL Developers。目前,最新的版本是 Eclipse Oxygen.2 (4.7.2) Release,为2017年10月放出的版本。另外,还需要注意的是,需要根据自己的操作系统选择正确的系统位数(32/64bits)。
PyDev 离线下载
我们可以在 PyDev 项目下载页面看到一些有价值的信息:
Eclipse、Java、PyDev 的版本对应关系;
Eclipse 在线安装 PyDev 的 URL;
离线安装 PyDev 下载地址(Get zip releases),点击可以进入 SourceForge 的下载页面。本文介绍离线下载方法。
Eclipse 安装
这里要注意,Eclipse 安装需要 Java 环境,如果还没有安装 Java 环境,请先去下载安装 JDK(点击这里)。
Eclipse 实际上是一个基于 OSGI 框架的软件,在 Windows 系统上无需安装,只需要将其解压,双击打开 eclipse.exe 即可。在 Mac OS 上则有所不同,需要双击 .dmg 文件安装。在第一次运行时,会要求你输入工作路径,你可以自定义也可以接受默认路径。
PyDev 插件安装
Eclipse 插件的安装方式有离线和在线两种,本文介绍在线安装方法。
打开 Eclipse,选择“Help”->“Install New Software”。在弹出的对话框中,点击 Add 按钮,添加新的安装源,如下图所示。
在 Location 处填写安装源的网址:http://www.pydev.org/updates/(很多博客中写的是http://pydev.org/updates),这个地址并非一成不变,因此,最好到官网确认一下。确认方法在上面“软件下载”小节中已有说明。
此外,需取一个名字填写在 Name 处,比如我这里写的是 PyDev。把“connect all update sites during install to find required software”的勾选去掉,否则在安装新插件时会联网寻找所有可能的更新站点搜索,导致安装时间不可预估,并可能导致安装失败。确定后可以看到一个 Pending 过程,然后得到如下图所示的插件,一般来说,我们只需选择 PyDev 即可,这里我两个都安装了(不推荐):
勾选后,点击 Next 进行安装。不过,由于网络的原因,这种方法安装 PyDev 极有可能失败,提示网络连接错误等。
Python 安装
Python 的安装比较简单,前往 Python 官网下载安装包。进入官网之后,官网会根据你的计算机操作系统推荐 Python 安装包的版本,如下图所示,你可以根据推荐下载最新的安装包,需要注意的是,Python 目前有 Python2 和 Python3 两个大版本,差异显著,本课程基于 Python3 编写,因此,请读者选择 Python3.X 安装包,具体内容安装步骤可参考博文《Python3 入门笔记——Windows 安装与运行》。
PyDev 插件配置
安装好 PyDev 插件后,并不能正常使用,还需要配置 Python 的解释器。
打开Eclipse,选择“Window” -> “Preferences”(如果是 Mac,则同时按下 Command 和 , 键唤出 Preference),找到“PyDev”,选择其中的“Interpreter” –> “Python”。点击“New”,添加一个系统里已有的 Python 解释器的路径(根据自己安装的路径确定)。确定后会经过短暂的处理,得到它的 Libraries、Buildins 等。当然,还可以根据自己的编程习惯对 PyDev 进行一些其他的配置,这里就不再说了。
创建一个 Python 项目
前面就已经配置好了 Python 的开发环境,下面新建一个项目,来测试一下,确实可以运行。
点击“File” -> “New” -> “Other”,找到“PyDev”,选择“PyDev Project”,点击“Next”。取一个项目名称,比如 helloPython,此外,还可以选择 Python 的语言版本和解释器版本,如下图所示:
点击“Finish”,完成项目创建。然后你会进入 PyDev 视图,进行 Python 开发。这里,我们就写一个最简单的程序,进行测试。右键项目的 src 目录,选择“New” -> “PyDev Package”,创建一个 Python 包,此处也命名为 helloPython。再右键该 package,“New” -> “PyDev Module”,此处也命名为 helloPython。双击打开 helloPython.py,添加如下代码。
if __name__ == '__main__': print("hello world!")
右键项目,选择“Run As” -> “Python Run”,或 Ctrl+F11 运行项目。此时,可以在下方的 Console 窗口,看到项目的运行结果:hello world!。
Python 预备知识
编程语言
编程语言(Programming Language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
解释
上面的定义读起来比较晦涩,下面我通俗的解释一下。
在人类发展史上,一般将文字的出现视为文明的标志,无论是汉语,英语还是法语,它们都是人类交流沟通的工具。文字使得人类之间的沟通和交流变得有章可循,极大的提高了信息传播的效率。自计算机诞生之后,人们一直希望给计算机赋予语言的特性,使计算机像人一样的沟通,而编程语言则可看作人与计算机之间“交流沟通”的工具,它使得人类和计算机之间的高效交流得以实现。
高级编程语言
在实践中,人们意识到人和计算机直接“交流”相当困难,计算机能够直接理解的语言是0和1构成的机器码,而这种机器码并不符合人类的认知习惯,因此,高级编程语言应运而生。
何为高级呢?指的是符合人类的理解习惯和思维方式,远离计算机底层。高级编程语言(如 Java,Python)使得人们能够以相对容易的方式将期望计算机执行的指令表达成文。但是,这种高级语言写成的“文章”,计算机是无法直接理解的,因此,还需要一个“翻译”,将人们编写的高级语言按照规则翻译成计算机能够理解的机器语言。根据编程语言的不同,这里的“翻译”也有显著区别。关于人与计算机之间的“交流”,简略的示意图如下:
与 Java 和 C++ 差别显著
学习过 C/C++、Java 的读者一定还记得定义变量的方法,如下例子,定义 a、b、c、d 四个变量,其数值类型分别为 int、double、long、float,定义变量的时候,我们需要“显式”的声明变量的类型,以便在内存中为该变量开辟空间,不同的数据类型占用的内存空间是不同的,所以必须要声明。
int a;double b;long c;float d;
与 C++ 和 Java 不同,Python 中变量没有类型,更谈不上声明变量类型,变量只是对象的引用,而 Python 的所有类型都是对象,包括函数、模块、数字、字符串、列表、元组、字典等等。
如下所示,定义变量 a 并赋值,同一个变量在同一段程序中三次被赋值不同的类型,之所以能如此操作,就是因为变量没有类型,它可以指向任何类型,单从这一点来看,Python 与 C++、Java 差别是很明显的。
# -*- coding: UTF-8 -*a = 12print("a=", a)a = "ABCDE"print("a=", a)a = 1 + 4jprint("a=", a)
执行结果:a= 12a= ABCDEa= 1+4j
本课程实例的说明
为了便于读者更好的理解,本课程列举了很多程序实例,其中部分程序涉及中文注释,另外,为了直观的展现程序执行的结果,课程中的实例大量使用 print 语句将结果打印到控制台,便于读者观察。
关于本课程的实例风格,这里举一个简单的例子:
# -*- coding: UTF-8 -*#自定义函数,求两个数的和def add(a, b): return a + b;#直接调用内建函数pow(x,y),计算x的y次方print('10的3次方 = %d' %pow(10,3))print('1 + 2 = %d' %add(1,2))执行结果:10的3次方 = 10001 + 2 = 3
特别说明
上面例子中,有两点需要解释一下。
# -*- coding: UTF-8 -*:
Python 默认是以 ASCII 作为编码方式的,如果在自己的 Python 源码中包含了中文(或者其他非英语系的语言),即使你把自己编写的 Python 源文件以 UTF-8 格式保存了,运行时仍可能会报错:SyntaxError: Non-ASCII character '\xe5' in file XXX.py on line YY, but no encoding declared;
解决办法:在每一个包含中文或其它语言注释的 Python 脚本文件的第一行,加入以下声明:
# -*- coding: UTF-8 -*-
#
“#”表示注解,在代码中输入它的时候,它右边的所有内容都将被忽略,注解是极为有用的,不仅有助于别人理解自己的代码,也可以提示自己。
通过命令运行 Python 脚本
上面的例子中,我们运行 Python 脚本都是通过 Eclipse IDE(集成开发环境)完成的,事实上运行程序的方法很多,对于 Python 语言而言,我们可以直接以命令的方式运行。
Windows 系统:
进入 Python 脚本 test.py 所在路径下,键入命令:Python test.py。
注意:Python 首字母大写。
Linux 或 Unix 系统:
进入 Python 脚本 test.py 所在路径下,键入命令:python test.py。
注意:Python 首字母小写。
第02课:数字和运算符
数字
Python 提供了三种数字类型,即 int(整型),float(浮点型),complex(复数)。
int:通常被称为整型或者整数,如100、99、1、3都属于整型;
float:浮点数包含整数和小数部分,如3.1415,12.578712;
complex:复数包含实数部分和虚数部分,形如 a+bj,其实部和虚部都是浮点类型。
需要注意的是,Python3 已经废弃了 Python2 的 Long(长整型),在 Python3 中,int 的大小没有限制,可以作为 Long 使用。
数字类型转换
Python 的三种数字类型可以进行相互转换,转换方式为:数字类型+圆括号,如下实例:
a = 123b = 3.1415926print("int(b)=",int(b))print("float(a)=",float(a))print("complex(a)=",complex(a))print("complex(a,b)=",complex(a,b))
执行结果:
int(b)= 3float(a)= 123.0complex(a)= (123+0j)complex(a,b)= (123+3.1415926j)
常用的数学函数
Python 提供了丰富的数学函数以降低编程实现的难度,本节将介绍一些常用的函数。
import math#求绝对值:abs(x)print("abs(-12)=",abs(-12))#向上取整:ceil(x)print("ceil(3.1415)=",math.ceil(3.1415))#向下取整:floor(x)print("floor(3.678)=",math.floor(3.678))#四舍五入:round(x)print("round(3.678)=",round(3.678))#乘方运算:pow(x,y),x的y次方print("pow(3,4)=",pow(3,4))#求平方根:sqrt(x)print("sqrt(144)=",math.sqrt(144))
执行结果:
abs(-12)= 12ceil(3.1415)= 4floor(3.678)= 3round(3.678)= 4pow(3,4)= 81sqrt(144)= 12.0
运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Python 也提供了一套丰富的运算符来满足各种运算需求。
Python 运算符大致可分为7种,即算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符以及身份运算符。
算术运算符
对算术运算,大家并不陌生,常用的加减乘除就是算术运算。不过,在编程语言里,算术运算的符号特殊一些,Python 中的算术运算有7种:加(+)、减(-)、乘()、除(/)、取模(%)、幂运算(*)和取整预算(//)。以下通过实例演示算术运算符的用法。
#初始化测试数据X = 24Y = 5Z = 0#分别进行7种算术运算Z = X + Y print("X + Y =", Z)Z = X - Y print("X - Y =", Z)Z = X * Y print("X * Y =", Z)Z = X / Y print("X / Y =", Z)Z = X % Y print("X % Y =", Z)Z = X ** Y print("X ** Y =", Z)Z = X // Y print("X // Y =", Z)
执行结果:
X + Y = 29X - Y = 19X * Y = 120X / Y = 4.8X % Y = 4X ** Y = 7962624X // Y = 4
比较运算符
比较无处不在,大于、小于、等于、不等于……和 C/C++、Java 等编程语言一样,Python 也提供了6种比较运算符:>(大于),<(小于),==(等于),!=(不等于),>=(大于等于),<=(小于等于)。比较运算的结果是一个布尔值,True 或者 False,如下实例:
#初始化测试数据X = 24Y = 5#分别进行7种比较运算print("X == Y:", X == Y)print("X != Y:", X != Y)print("X > Y:", X > Y)print("X < Y:", X < Y)print("X >= Y:", X >= Y)print("X <= Y:", X <= Y)
执行结果:
X == Y: FalseX != Y: TrueX > Y: TrueX < Y: FalseX >= Y: TrueX <= Y: False
赋值运算
在前文的实例中已经用到赋值运算,如 X = 25,就是一个最简单的赋值运算,“=”就是最简单的赋值运算符。将简单的赋值运算与算术运算结合,Python 形成了丰富的赋值运算符:+=、-=、=、/=、%=、*=、//=。实例如下:
#初始化测试数据X = 2Y = 3#分别进行7种赋值运算Y = X print("Y = X, Y =", Y)Y += X print("Y += X, Y =", Y)Y -= X print("Y -= X, Y =", Y)Y *= X print("Y *= X, Y =", Y)Y /= X print("Y /= X, Y =", Y)Y **= X print("Y **= X, Y =", Y)Y //= X print("Y //= X, Y =", Y)
执行结果:
Y = X, Y = 2Y += X, Y = 4Y -= X, Y = 2Y *= X, Y = 4Y /= X, Y = 2.0Y **= X, Y = 4.0Y //= X, Y = 2.0
逻辑运算
所谓逻辑运算,就是:与、或、非。Python 中3种逻辑运算符分别为:and(与),or(或),not(非),逻辑运算的结果是布尔值:True 或者 False。
A and B:当 A 为 False 时,运算结果为 False;否则返回 B 的值;
A or B:当 A 为 True 时,运算结果为 A 的值,否则返回 B 的值;
not A:当 A 为 True 时,返回 False,否则返回 True。
如下实例:
#初始化测试数据X = 2Y = 3Z = 5#分别执行3种逻辑运算print("X>Y and X<Z :", X>Y and X<Z)print("X<Y and Z :", X<Y and Z)print("X>Y or Z :", X>Y or X<Z)print("X<Y or Z :", X<Y or Z)print("X or X<Z :", X or X<Z)print("not X :", not X)print("not X<Y :", not X<Y)
执行结果:
X>Y and X<Z : FalseX<Y and Z : 5X>Y or Z : TrueX<Y or Z : TrueX or X<Z : 2not X : Falsenot X<Y : False
位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。Python 中有6种位运算符:
&:按位与运算符,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0;
|:按位或运算符,只要对应的二个二进位有一个为1时,结果位就为1;
^:按位异或运算符,当两对应的二进位相异时,结果为1;
~:按位取反运算符,对数据的每个二进制位取反,即把1变为0,把0变为1;
>>:右移动运算符,把 >> 左边的运算数的各二进位全部右移若干位,>> 右边的数指定移动的位数;
<<:左移动运算符,运算数的各二进位全部左移若干位,由 << 右边的数指定移动的位数,高位丢弃,低位补0。
举个例子:a=21,b=6,将两个数转换为二进制形式进行位运算。
a = 0001 0101b = 0000 0110a&b = 0000 0100a|b = 0001 0111a^b = 0001 0011~a = 1110 1010a<<2 = 01010100a>>2 = 0000 0101
成员运算
除了上文介绍的5种运算符,Python 还支持成员运算符。介绍成员运算符之前,我们需要提前了解一个概念:数据结构,如字符串、列表、元组、字典。在接下来的章节中我们将详细介绍这些基础的数据结构。字符串、列表、字典,它们就像一个集合,其中包含若干元素,这些元素就是集合的成员;对于一个给定的元素,它有可能在一个给定的集合中,也可能不在,Python 中采用成员运算符来判断元素是否属于成员,成员运算的结果为布尔值,True 或者 False。
如下实例:
#初始化一个字符串和列表temp1 = "ABCDEFG"temp2 = [4,2,3,5,8,9]a = "CDE"b = 5c = "CDF"print("a in temp1?", a in temp1)print("b in temp2?", b in temp2)print("c in temp1?", c in temp1)
执行结果:
a in temp1? Trueb in temp2? Truec in temp1? False
身份运算符
身份运算符用于比较两个标识符所引用对象的存储单元,计算结果为布尔值,包含两个运算符:is 和 is not,分别用于判断两个标识符是否引用自一个对象。关于存储单元的比较,涉及到对内存模型的理解,本节不做详述,留到后面章节介绍。
第03课:字符串、列表和栈
第04课:元组、字典、集合与队列
第05课:条件、循环及其它语句
第06课:抽象之函数
第07课:抽象之类
第08课:错误和异常
第09课:模块和标准库
第10课:文件和流
第11课:数据库与网络编程
第12课:图形用户界面
第13课:实战之用 Python 写一个抢票软件
第14课:实战之用 Python 写一个简易爬虫
---------------------
作者:GitChat的博客
来源:CSDN
原文:https://blog.csdn.net/valada/article/details/79982704
版权声明:本文为博主原创文章,转载请附上博文链接!