首页>参考读物>计算机科学与技术>软件与程序设计

Python编程从0到1(视频教学版)
作者 : 张頔 著
出版日期 : 2019-08-20
ISBN : 978-7-111-63295-5
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 276
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书以Python语言构建了程序设计基础课程的教学体系。本书在对程序设计核心方法的探讨上较其他Python书籍更为全面和深入。通过对本书内容的学习,读者将全面地掌握用Python进行程序设计的基本能力。
本书分为4章,每章都细分为若干节,知识点非常详细。第1章向读者介绍Python的基本语法和程序设计的一般方法。第2章向读者介绍函数这一重要概念。第3章通过Python的内建类型讲述了常见数据结构。第4章讲解Python的面向对象特性。
本书适合大专院校理工科专业的Python教学,IT职业培训机构的Python类课程体系,以及自学Python的学习者。

图书特色

广告语:
一本值得反复研读的佳作,注重内功修炼,而非花拳绣腿;来自真实经验的详略取舍,注重对知识的探寻和思考;透过Python表象,深入程序设计本质,其然并知其所以然


编辑推荐:
一本值得你反复研读的Python佳作,注重内功修炼,而非花拳绣腿
来自于真实教学经验的详略取舍,注重对知识的探寻和思考过程
透过Python的表象,深入程序设计的本质,让你知其然并知其所以然

图书前言

  生产力水平的发展是人类历史的主旋律。决定生产力水平的重要因素之一是生产工具。从这个角度讲,人类历史就是从石块到计算机的历史:从石器时代到信息时代。计算机是信息时代的主要生产工具,为了掌握这种工具,就要学习程序设计语言。
  程序设计语言很多,相关的书籍更多。初学者常困惑于如何选择入门语言①,一旦决定后又困惑于选择什么教材。令人沮丧的是,选择的机会成本并不低:一般初学者完整地学习某门编程语言需要一个月甚至更多时间。大专院校课程改革的机会成本则更高。有人说选择什么语言入门不重要,成为高手后自然兼通各种语言。这种说法忽视了大多数学习者并不会成为高手的事实,而且选择性遗忘了他们自己作为初学者时所走的弯路。总而言之,学习者和教师在选择适合入门的编程语言和书籍时应当谨慎行事。因此笔者有必要在前言中将写作意图和内容取舍进行说明,以作为读者选择的依据。1
写作背景和目的
  笔者在2018年秋接到邀约并着手写作,全稿终于2019年春。此时Python已经跻身主流语言之列。之所以称其为“主流”语言,在笔者看来有以下几点证据:
* 在各类有影响力的语言排行榜上,使用Python的比例开始占据较大份额,排名也很靠前②;
* 在许多领域,Python成为主要的编程语言,甚至是首选语言,例如在数据分析、人工智能和服务器开发等领域;
* 教育部将Python纳入了国家计算机等级考试的科目③。
  而在此之前其已经得到了广泛应用:
* Python逐渐成为许多国际一流高校程序设计课程的教学语言;
* 许多基础软件框架采用Python作为设计语言或提供Python的编程接口;
* Python在开源软件界和工业界已广受欢迎。
  上述事实是笔者决定基于Python编写本书的原因④。其他的原因则是在教学中无合适教材可用。数年前笔者领导团队设计Python课程体系,那时曾经“遍访”各种Python书籍和教程。当时的Python书籍或者是简单的“手把手入门”,或者是大部头的“知识大全”,或者是应用于某具体领域的“手册指南”。
  随着近年来Python教学实践的展开,市面上开始出现各种教科书体裁的Python书籍(如罗伯特·塞奇威克等所著的《程序设计导论:Python语言实践》)。那为何还要再写一本同样主题的教科书呢?因为教学对象不同,教学目标有所差别,教学过程各有侧重。所以教科书的首要价值在于“不同”。这种不同在本书来说至少有两个层面,一是Python与其他语言的不同,二是本书与其他Python书籍的不同。
  学习或讲授新知识时,首先应注意到的往往是其与原有认知的相同之处,但唯有深入理解并能运用其不同后,才算窥得门径。例如Python也有循环、分支和函数等各种语言俱有之概念,但学习者如只见共性,并由此得出Python很简单的结论,便失去了学习新语言的意义。教师在教学生时也不能仅仅按照讲授旧有语言的经验,把讲义中的例子依次用Python重写一遍了事。①2
  书的“不同”则在于体裁形式、内容取舍编排和作者观点的不同。既然是教科书,总不大好写成对话体,也不适宜画成漫画②。所以教科书的不同主要体现在取舍、次序、示例和观点等方面。然而写一本“完全不一样”的书是很难的,尤其是在Python已经相当流行的当下。③
  “不同”总是相对的,各种相对性参照中,对读者来说最重要的参照便是读者自身。初来者看处处皆是新奇,见多识广后则觉得不过尔尔。所以下文仅对本书内容的取舍和编排进行说明,至于其中有何“不同”则留待读者自己体会。
取舍
  在教科书中全面讲授Python的细节是不现实的(这里说的语法细节包括完整的语法模型、各种对象的API④,以及各种标准库),原因有以下几点:
* 过多的细节会喧宾夺主,无法凸显真正重要的核心内容;
* 语言中的艰深部分不适合本书面向的教学阶段,也不常用于多数程序员的日常工作;
* Python标准库包罗万象,全面介绍是不现实的(无论从篇幅上还是读者的知识背景基础而言);
* Python在不断发展,其细节仍然在不断变化中。
  笔者认为,既然在整体上无法面面俱到,那么在局部也不应有这种负担。例如“异常处理”这一主题,如果完整地讲授异常机制的每个细节(如各种内建异常类型),则需要相当多的篇幅①。但真实的情况是:绝大多数的工程师根本不懂如何处理程序的意外情况,不论是使用C语言这样没有异常处理机制的语言,还是使用Java或Python这样有完整异常处理机制的语言。究其原因有以下几点:3
* 一是初学者没有能力接受太多的异常处理知识,正常程序还写不明白,哪里有精力去整什么异常处理;
* 二是异常处理的核心在于全面、准确地剖析程序的各种意外情况,不具备这个能力,学习再多的异常处理机制也是枉然;
* 三是在学习程序设计的初级阶段,往往用算法进行练习(比如走个迷宫、匹配个字符串),不和复杂的外部世界(如网络)打交道;
* 四是考虑到教学重点和叙述篇幅,也往往假定数据有效,这样就不用考虑处理意外情况。这样一来,教学中费大力气讲授的异常处理机制,也因为暂时无用而被抛诸脑后。
  本书则不纠缠于异常处理的细节和内建异常的类型,而是在讲述完基本语法后详细剖析一个程序实例(1.10.2节),展示如何分析和处理各种意外的输入情况,篇幅上也仅限制为一节。读者若能“吃透”这一部分内容,则当有编写健壮程序的意识,自能够在工作中举一反三,也无须笔者再行赘述。反之,若对健壮性不够重视,则多费篇幅也没有意义。
  作为这种取舍思路的补充,本书有时会指出一些自学内容,将其留作练习,并引导读者进行思考或通过网络查阅相关资料。作为编程入门教科书,本书首要讲述程序设计的一般性方法,例如:
* 数据类型、流程控制、输入/输出和函数等基本手段;
* 状态机、递归、函数式编程等高级技巧;
* 数据结构和算法;
* 面向对象的设计思想。
  对Python自身语法的介绍,也在本书各部分占据了相当篇幅。然而本书终归不是语法手册,所以并不追求语法知识细节的完整性。书中大部分小节后会给出延伸的问题和练习,或是明确的编码练习,或是要求读者进行深入地学习和思考,统称为“思考和扩展练习”。本书在设计和挑选例题时力图做到和传统的程序设计入门书籍在角度和深度上有所差异,目的在于为学生和教师提供更加开阔的思路。
  计算机程序设计的理论基石(如语言基本模型、数据结构和算法)是在半个世纪前奠定的。虽然Python诞生的年代稍晚,但也基于这些基石构建而成。Python的主体部分是基于朴素平实的想法构建而成,而非天才的灵光一现。本书的一个重要初衷就是将这些朴素呈现给读者。笔者舍去了一些和该初衷无关的内容,如传统教学中往往着重介绍的字符串显示控制标记,在本书中只是一带而过。而那些更为深层次的基本概念则得到了强化,例如状态机模型、递归消除、面向对象动机及性能权衡等。
  本书在示例中坚持给出完整可执行的代码或交互界面步骤,然而本书绝非“手把手”的教程。书中有些内容对于学习者来说是具有相当难度的,需要读者反复阅读思考并且动手实践才能够理解或掌握。这种难度是具有现实意义的:较难内容大多数来自于工程实践、后续学习,甚至是求职面试中的重点。读者应当认识到对这些问题的思考能力和思考过程的重要性。
内容编排
  本书分为4章,取名为:
* 第1章 基础;
* 第2章 函数;
* 第3章 数据结构;
* 第4章 面向对象。
  上述各章内容并非泾渭分明,原因主要在于Python的知识点存在许多“循环依赖”,如图1所示。例如for循环用到了迭代器的概念,而讲授迭代器需要足够的面向对象知识,绕过分支控制先完整地讲述面向对象也不现实。对于有经验的读者来说,这没有任何问题,但对初学者则会造成很大困扰。基于这些原因及教学实践,本书在第1章中简要讲授了函数定义而非拖至第2章,将定义类的基本方法提前至第2章而不是留待第4章。这两节内容的调整是本书的重要关节。

图1 知识点的循环依赖
  这4章内容以第1章篇幅最长,第2、3章次之,第4章最短。程序的基本设计方法、异常处理和程序调试等内容归入了第1章。模块和迭代器归入了第2章。部分内建类型,如字典的深入讲解归入了第3章。在第4章面向对象设计部分,考虑到相应的学习阶段课时、Python的混合风格特性和简洁的面向对象语法,笔者决定精简篇幅而非长篇大论。另外,由于在Python中对象模型和面向对象调用风格的无处不在,许多相关知识已经散见于前3章,也没必要再次重复讲述。
习题
  本书没有单独整理的“习题集”。首先是因为笔者水平所限,并且时间也有限,无法设计大量的原创习题。另一个原因是笔者反对采用在语言学习阶段使用“刷题”的方式提升编程能力①。读者如能将本书示例及每小节末尾的“思考和扩展练习”完成,在笔者看来就足够了。如果读者在完成这些内容后仍觉不足,不要把精力浪费在所谓的“习题集”或“面试宝典”上,而应该去学习更为深入的主题(如操作系统、网络、算法或编译原理等),或投身于解决实际问题。4
参考文献
  本书中提到的若干算法、观点、文档和源码的原始出处在书尾以参考文献的形式给出。阅读原始文献是非常有必要的。通过对这些文献的阅读,即便是少量阅读,学习者也能够体会到创造者当时的心境。这看似增加了额外的学习任务,但实为捷径。为了便于读者检索,笔者用[1][2]的编排格式给出了所对应的参考文献序号。
版本
  笔者在Mac计算机上完成了绝大部分的写作工作。写作时的Python最新版本是3.7。当然这绝不意味着读者也需要搞一套这样的软硬件环境。使用Linux的读者不用太过担心兼容性问题。使用Windows系统的读者除去1.6.3节中管道行的相关命令外,应当可以顺利运行本书中的其他程序。笔者平时并不使用Windows系统,所以本书示例在Windows平台上可能会稍有更多的兼容性问题。但跨平台的兼容性带来的麻烦远不及Python本身升级带来的兼容性问题。所以在学习时纠结于应当使用哪种操作系统平台是意义不大的,因为Python未来的某次升级可能导致本书代码无法运行的情况更多。好在互联网的便利使得笔者对本书出版后做勘误和代码更新很容易,笔者会将本书的勘误信息和最新的升级信息反馈给出版社,读者可在出版社的官网上找到本书,获取这些资料。
格式约定
  为了便于读者学习,本书坚持给出绝大多数示例的完整代码及运行效果。有的代码示例直接运行即可看到期望的结果,而有的代码则需要进行一些样例输入或者将其导入后调用。本书统一将这些运行结果或运行示例称为“程序运行结果”。
  本书用以下格式表示代码实例。这些实例大部分能够直接运行,少部分需要读者自行补充完整。
  
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from random import random #导入模块
for i in range(10): #循环10次
print(i,

上架指导

计算机/程序设计/Python

封底文字

内容简介:

  本书以Python语言构建了程序设计基础课程的教学体系。本书在对程序设计核心方法的探讨上较其他Python书籍更为全面和深入。通过对本书内容的系统学习,读者将全面掌握用Python进行程序设计的基本能力。
  本书共分为4章。第1章介绍了Python的基本语法和程序设计的一般方法,涵盖表达式、程序运行、内建类型、赋值、引用、流程控制结构、输入/输出、核心设计方法、算法性能描述、异常处理和程序调试等内容。第2章介绍了函数这一重要概念,涵盖函数基础、模块、包、作用域、栈帧、递归、类、成员方法、高阶函数、迭代器和生成器模式等内容。第3章通过Python的内建类型讲述了常见的数据结构,涵盖列表、链表、散列表和二叉树等内容,并介绍了deque链表块和OrderedDict有序字典两个案例,最后介绍了综合练习——寻路问题算法。第4章介绍了Python的面向对象特性,涵盖类、继承和多态等重要概念,并以一个综合练习——GUI程序设计PyQt结束全书。
  本书讲解由浅入深,循序渐进,适合Python编程的自学人员和爱好者阅读,也适合作为高校理工科专业的Python教学用书,还适合作为IT培训机构的Python教学用书。

-------------------------------------------------------------------------------------------
业内点评

本书从比较特别且实用的角度入手,既可以让初学者能够比较容易地进入程序设计领域,也可以让有经验的开发人员能够从中汲取一些新的营养,是一本值得每一个Python程序设计初学者及爱好者仔细研读几遍的好书。
——资深程序员 姜寒

不知不觉使用Python已有11余载。未曾想它能够成为目前最火爆的计算机语言之一。程序员应该积极地去拥抱它。学习Python编程,需要一本好的Python图书,它可以让你的学习事半功倍。虽然市面上的Python图书已经汗牛充栋,但是本书却与众不同。它是作者多年从事Python教学和开发经验的总结,内容丰富,重点突出,讲解由浅入深、循序渐进,编排风格独特,不仅适合读者自学,而且也适合各院校的教学,是一本不可多得的Python优秀图书。
——Feon与Simchain框架开发者/资深Python程序员 裴尧尧 博士

图书目录

前言
第1章 基础 1
1.1 历史 2
1.2 表达式 3
1.2.1 运算数 3
1.2.2 运算符 3
1.2.3 表达式的风格 4
1.2.4 表达式的嵌套 5
1.2.5 数据类型 5
1.2.6 副作用 6
1.2.7 小结 6
1.3 运行程序 6
1.3.1 交互执行模式 7
1.3.2 查阅帮助文档 8
1.3.3 执行Python程序脚本 9
1.3.4 标识符和关键字 10
1.3.5 运行环境的错误提示 11
1.3.6 示例:欧几里得算法 12
1.3.7 小结 15
1.4 内建类型、赋值和引用 15
1.4.1 字面值 15
1.4.2 构造方法 17
1.4.3 容器类型 18
1.4.4 索引和切片 22
1.4.5 左值、赋值和引用 24
1.4.6 del操作 29
1.4.7 小结 30
1.5 流程控制结构 30
1.5.1 if分支语句 30
1.5.2 布尔运算 33
1.5.3 while循环 34
1.5.4 for循环 40
1.5.5 条件表达式 42
1.5.6 定义简单函数 43
1.5.7 小结 44
1.6 输入/输出 44
1.6.1 标准输入/输出(I/O)流 44
1.6.2 重定向标准I/O至文件 45
1.6.3 用管道行串接I/O 46
1.6.4 标准I/O流对象 47
1.6.5 命令行参数 48
1.6.6 环境变量 49
1.6.7 格式化字符串 50
1.6.8 小结 51
1.7 简单练习 51
1.7.1 示例:打印金字塔图形 52
1.7.2 示例:3X+1问题 53
1.7.3 示例:绘制正多边形 54
1.7.4 示例:绘制函数曲线 55
1.7.5 示例:蒙特卡洛方法 56
1.7.6 示例:埃特金迭代法求方程的根 59
1.7.7 小结 61
1.8 程序执行模型 61
1.8.1 手段限制 62
1.8.2 无状态程序 62
1.8.3 有状态程序 67
1.8.4 线性存储器 73
1.8.5 使用栈设计程序 76
1.8.6 使用队列设计程序 79
1.8.7 小结 84
1.9 算法的性能描述 85
1.10 异常处理 87
1.10.1 基本语法 88
1.10.2 提升程序的健壮性 91
1.10.3 完整的异常捕获机制 94
1.10.4 小结 96
1.11 程序调试 97
1.12 总结 98
第2章 函数 99
2.1 函数基础 100
2.1.1 函数的作用 100
2.1.2 定义和调用函数 101
2.1.3 提供机制而非策略 102
2.1.4 用函数消除重复代码 103
2.1.5 Lambda表达式 105
2.1.6 回调函数 106
2.1.7 闭包 107
2.1.8 传参方式 108
2.1.9 文档字符串 110
2.1.10 小结 111
2.2 模块和包 111
2.2.1 处理名字冲突 111
2.2.2 模块与import 112
2.2.3 在模块中包含测试代码 113
2.2.4 模块搜索路径 113
2.2.5 包 114
2.2.6 小结 115
2.3 作用域和栈帧 115
2.3.1 名字的查找 115
2.3.2 nonlocal和global关键字 118
2.3.3 函数的调用栈 118
2.3.4 对象的生命期 119
2.3.5 小结 121
2.4 递归 121
2.4.1 单重递归 121
2.4.2 多重递归 124
2.4.3 示例:科赫雪花 125
2.4.4 示例:二叉树的后序遍历 127
2.4.5 消除尾递归 129
2.4.6 用栈和状态机消除递归 131
2.4.7 重复递归带来的性能陷阱 135
2.4.8 用动态规划消除重复递归 136
2.4.9 示例:通配符匹配 139
2.4.10 小结 141
2.5 类和成员方法 141
2.5.1 面向对象的函数调用风格 142
2.5.2 类和实例 143
2.5.3 定义类 144
2.5.4 创建实例 145
2.5.5 方法定义 145
2.6 高阶函数 147
2.6.1 对函数进行运算 148
2.6.2 函数装饰器 149
2.6.3 map和filter函数 152
2.6.4 小结 155
2.7 迭代器和生成器模式 155
2.7.1 可迭代对象和迭代器 156
2.7.2 生成器函数 157
2.7.3 列表推导式和生成器表达式 158
2.7.4 小结 160
2.8 总结 160
第3章 数据结构 161
3.1 列表 162
3.1.1 数组和内存 162
3.1.2 列表对象的结构 165
3.1.3 列表元素的插入 168
3.1.4 列表的排序 170
3.1.5 有序列表的二分查找 171
3.1.6 列表的基本操作接口 172
3.1.7 小结 173
3.2 链表 174
3.2.1 单链表 175
3.2.2 实现迭代器模式 178
3.2.3 用单链表实现栈 179
3.2.4 双向循环链表 180
3.2.5 用双向链表实现队列 182
3.2.6 双向链表的查找、插入和删除 183
3.2.7 小结 184
3.3 散列表 184
3.3.1 基本原理 185
3.3.2 应用示例 188
3.3.3 字典 189
3.3.4 小结 193
3.4 二叉树 194
3.4.1 概念和定义 194
3.4.2 表示和存储 196
3.4.3 遍历 198
3.4.4 二叉搜索树 200
3.4.5 二叉堆和优先队列 207
3.4.6 哈夫曼编码 209
3.4.7 小结 212
3.5 案例分析 212
3.5.1 deque链表块 212
3.5.2 OrderedDict有序字典 216
3.6 综合练习:寻路问题算法 218
3.6.1 图的表示 219
3.6.2 Dijkstra算法 221
3.6.3 A*算法 224
3.7 总结 231
第4章 面向对象 232
4.1 类 233
4.1.1 术语 233
4.1.2 成员方法 234
4.1.3 静态方法 236
4.1.4 类属性和类方法 237
4.1.5 私有成员 239
4.1.6 property装饰器 240
4.1.7 动态添加属性和slots 242
4.1.8 实例的生命周期 243
4.1.9 复制对象 244
4.1.10 小结 245
4.2 继承和多态 246
4.2.1 语法 246
4.2.2 如何设计类 249
4.2.3 多继承 251
4.2.4 鸭子类型和多态 252
4.2.5 小结 253
4.3 综合练习:GUI程序设计PyQt 253
4.3.1 安装PyQt 254
4.3.2 使用继承创建窗体 255
4.3.3 响应事件 256
4.3.4 小结 257
4.4 总结 257
参考文献 258

教学资源推荐
作者: (美)David Vandevoorde
作者: 余永红
作者: 钱晓捷 编著