推荐编程书籍:Python大学教程/高等教育质量工程信息技术系列示范教材,由清华大学出版社2018-08-01月出版发行,本书编译以及作者信息 为:张基温 著,此次为第1次发行, 国际标准书号为:9787302504542,品牌为清华大学, 这本书采用平装开本为16开,纸张采为胶版纸,全书共有318页字数49万3000字,是本Python 编程相关非常不错的书。
此书内容摘要
本书是高等学校Python基础课程的教材。全书由7个单元组成。第1单元介绍Python的基本知识,内容包括Python的特点、数据对象、变量、输入输出等,使读者对Python有一个初步了解;第2单元为Python程序结构,内容包括选择结构、循环结构、函数、模块、异常处理等;第3单元为容器,内容包括序列容器、无序容器、迭代器、生成器与推导表达式;第4单元为面向类的程序设计,内容包括类与对象、类与对象的通用属性与操作、类的继承;第5单元为Python数据处理,内容包括文件操作、数据库操作、文件与目录管理;第6单元为Python网络编程,内容包括Python Socket编程、Python WWW应用开发;第7单元为Python GUI开发,内容包括GUI三要素、GUI程序结构、GUI制作示例。
本书力求内容精练、概念准确、代码便于阅读、习题丰富全面、适合教也容易学。为了便于初学者很快能使用以丰富的模块支撑的Python环境,书后给出了Python运算符、Python内置函数、Python标准模块库目录和Python 3.0标准异常类结构。
本书适合作为高等学校零基础开设Python课程的教材,也适合作为程序设计爱好者和有关专业人员学习的参考书。
关于此书作者
暂无.
编辑们的推荐
彰显“计算思维+语言艺术+工程规范”的程序设计教育理念。
概念力求精准,突出思想性、启发性、本质性。
结构力求严谨、紧凑,便于知识总结、梳理。
例题力求经典,例程力求简短,便于阅读、理解。
素材力求丰富,创造一个良好的知识建构环境和后期学习参考。
习题力求丰富、多样,减轻教师开发题目的负担。
零起点、轻松入门、螺旋式深入,适合不同层次的教学。
以Python3.6.1为蓝本,例程多在IDLE界面上调试,以便初学者快速掌握Python语法。
Python大学教程/高等教育质量工程信息技术系列示范教材图书的目录
第1单元 Python起步 1
1.1 程序设计语言与Python 1
1.1.1 计算机程序设计语言 1
1.1.2 高级程序设计语言分类 3
1.1.3 Python及其特点 6
1.1.4 Python模块与脚本文件 8
练习1.1 11
1.2 Python数值对象类型 12
1.2.1 Python数据类型 12
1.2.2 Python内置数值类型 13
1.2.3 Decimal和Fraction 15
练习1.2 16
1.3 Python数据对象、变量与赋值 17
1.3.1 Python可变对象与不可变对象 17
1.3.2 Python变量与赋值操作 18
1.3.3 Python垃圾回收与对象生命期 21
1.3.4 Python标识符与保留字 22
练习1.3 23
1.4 数值计算——万能计算器 24
1.4.1 内置算术操作符与算术表达式 24
1.4.2 内置数学函数 27
1.4.3 math模块 29
练习1.4 31
1.5 输入与输出 32
1.5.1 回显与print()函数的基本用法 32
1.5.2 转义字符与print()函数的格式控制 33
1.5.3 input()函数 37
练习1.5 37
第2单元 Python程序结构 38
2.1 命题与判断 39
2.1.1 布尔类型 39
2.1.2 比较表达式 39
2.1.3 逻辑表达式 40
2.1.4 身份判定操作 43
练习2.1 43
2.2 选择结构 45
2.2.1 if-else型选择结构 45
2.2.2 if-else嵌套与if-elif选择结构 47
练习2.2 49
2.3 循环结构 50
2.3.1 while语句 51
2.3.2 for语句 52
2.3.3 循环嵌套 54
2.3.4 循环中断与短路控制 56
2.3.5 穷举 59
2.3.6 迭代 61
2.3.7 确定性模拟 66
2.3.8 随机模拟与random模块 68
练习2.3 71
2.4 函数 73
2.4.1 函数调用、定义与返回 73
2.4.2 基于函数的变量作用域 77
2.4.3 函数参数技术 79
2.4.4 函数标注 83
2.4.5 递归 84
2.4.6 lambda表达式 88
练习2.4 89
2.5 程序异常处理 92
2.5.1 异常处理的基本思路与异常类型 93
2.5.2 try-except语句 94
2.5.3 控制异常捕获范围 96
2.5.4 else子句与finally子句 96
2.5.5 异常的人工显式触发:raise与assert 97
练习2.5 98
第3单元 容器 100
3.1 序列容器 100
3.1.1 序列对象的构建 100
3.1.2 序列通用操作 102
3.1.3 列表的个性化操作 108
3.1.4 字符串的个性化操作 111
3.1.5 字符串编码与解码 114
3.1.6 字符串格式化与format()方法 116
3.1.7 正则表达式 119
练习3.1 125
3.2 无序容器 129
3.2.1 字典 129
3.2.2 集合 132
练习3.2 135
3.3 迭代器、生成器与推导表达式 138
3.3.1 迭代器 138
3.3.2 生成器 139
3.3.3 推导表达式 144
练习3.3 147
第4单元 面向类的程序设计 150
4.1 类及其组成 150
4.1.1 类模型及其语法 150
4.1.2 类对象、实例对象与__init__ ()方法 152
4.1.3 最小特权原则与对象成员访问限制 155
4.1.4 实例方法、静态方法与类方法 158
练习4.1 159
4.2 Python内置的类属性、方法与函数 161
4.2.1 内置的类属性 161
4.2.2 获取类与对象特征的内置函数 162
4.2.3 操作符重载 166
4.2.4 可定制的内置方法 168
练习4.2 176
4.3 类的继承 178
4.3.1 类的继承及其关系测试 178
4.3.2 新式类与object 180
4.3.3 子类访问父类成员的规则 182
4.3.4 子类实例的初始化与super 182
练习4.3 187
部分内容试读
前 言
(一)
在多年从事C语言、C++和Java教学工作中,少不了有学生要求解释如fun(i ++,i ++)这样的问题。有时,到外校进行学术交流时,也不乏同行教师问到这个问题。我感觉,能问到这个问题的学生,无疑是好学生。因为,这个问题虽小,但要解释清楚它,需要涉及非定义行为、赋值表达式的副作用、序列点、程序设计风格等方面的概念,这些概念在相关教材中几乎不见提到,许多教师也不清楚。更让我吃惊的是,当我给一位从事了30多年C与C++教学的大学副教授讲赋值表达式的副作用时,他竟然回了我一句:“我不这样认为。”这足以说明问题的严重性了。
实际上,与其说是赋值操作的副作用,不如说是“变量”的副作用。这似乎是一个不可逾越的鸿沟。因为“值的变化”是变量的基本性质。然而,这个问题在Python中被解决了,因为它的数据多数属于不可变类型。对于不可变类型的变量赋值,就成为引用指向另外一个对象了。这确实是Python的一大突破。Python有许多让人耳目一新的特点,正是这些特点,使它得到了快速推广,并赢得广泛的支持。
2017年7月19日,IEEE(美国电气电子工程师学会)出版的旗舰杂志IEEE Spectrum发布了第4届顶级编程语言交互排行榜。这个排行榜由读者需求、用户增速、开源、设计自由度、雇主需求5个子排行榜组成。其中,前4个子排行榜中都是Python力压群雄,只有雇主需求一榜位于C和Java之后,排名第三。图1为IEEE Spectrum 2017 编程语言 Top 10 排名情况。
图1 IEEE Spectrum 2017编程语言Top 10排名情况
据 IEEE Spectrum介绍,这个排行依据数据记者 Nick Diakopoulos 提供的数据,结合 10 个线上数据源的 12 个标准,对 48 种语言进行了排行。因为不可能顾及每一个程序员的想法,IEEE Spectrum使用多样化、可交互的指标权重来评测每一种语言的现行使用情况。显然,这个排行的客观性、权威性是极高的。
另一个影响极大的程序设计语言排行榜是TIOBE。TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、百度)以及Wikipedia、Amazon、YouTube统计出排名数据,但只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,也不反映就同一算法使用不同语言编写时代码数量多少。表1是其2017年10月发布的Top 10榜单。可以看出,Python虽位居第5,但它有上升趋势,而前4名均有下降趋势。
表1 TIOBE 2017年10月发布的程序设计语言Top 10榜单
2017年10月
2016年10月
变化
编程语言
评级/%
变化/%
1
1
Java
12.431
-6.37
2
2
C
8.374
-1.46
3
3
C++
5.007
-0.79
4
4
C#
3.858
-0.51
5
5
Python
3.803
+0.03
6
6
JavaScript
3.010
+0.26
7
7
PHP
2.790
+0.05
8
8
Visual Basic .NET
2.735
+0.08
9
11
↑
Assembly language
2.374
+0.14
10
13
↑
Ruby
2.324
+0.32
(二)
Python应用广泛,所包含的内容自然也十分广泛。但是作为关于Python的基础教程,不可能把所有内容都包含进来,甚至不可能包含较多的内容,内容选择非常重要。作者经过反复斟酌,决定采取以Python核心语法为重心,添加关键性的、基础性的应用型内容。最后,将应用型内容圈定在数据处理、网络编程和GUI设计3个方面,并把全书按照7个单元进行组织。前4个单元为Python的核心语法知识,后3个单元为3个应用 方面。
第1单元介绍Python的基本知识,内容包括Python的特点、数据对象、变量、输入输出等,使读者对Python有初步了解。
第2单元为Python程序结构,内容包括选择结构、循环结构、函数、模块、异常 处理。
第3单元为容器,内容包括序列容器、无序容器、迭代器、生成器与推导表达式。
第4单元为面向类的程序设计,内容包括类与对象、类与对象的通用属性与操作、类的继承。
第5单元为Python数据处理,内容包括文件操作、数据库操作、文件与目录管理。
第6单元为Python网络编程,内容包括Python Socket编程、Python WWW开发。
第7单元为Python GUI开发,内容包括GUI三要素、GUI程序结构、GUI制作 示例。
著名心理学家皮亚杰创建的结构主义,把教师的主要职责定义为为学习者创建学习环境。作为Python教材,本书把附录和习题作为正文之外的两个重要的学习环境。本书的附录包括Python运算符、Python内置函数、Python标准模块库目录和Python 3.0标准异常类结构。
除了语言的内核和内置函数,模块是Python的最大支撑。在Python中,每一项应用都要由相应的模块支持。每一个应用程序的开发都需要按照“熟悉领域知识—导入相关模块—设计相应算法—编写相应代码”的过程。由于Python开源代码的特点和社区广大热心者的支持,目前Python已经有上千的模块可以利用。读者知道哪些模块可用,不仅可以开阔思路,而且可以浏览这些模块目录得到通向该应用领域的线索。不过,要把这些模块全罗列出来不仅没有必要,也没有可能。这是将Python 3.0标准模块库目录作为附录的原因。虽然仅仅只有29项,但足可以对Python的应用范围画出一个轮廓。
习题也是重要的学习环境。为此本书收集并设计了多种类型的习题,并且在每节后面都给出相应的练习题。本书习题量虽多,却还是无法满足不同的练习需要。希望学习者和使用本书的老师们,不要囿于本书给出的习题,要开发出更多课后练习,开辟更好的Python学习环境。还需要说明的是,不是每一个题目都能直接在正文中找到答案。要找到正确的答案,需要深刻理解基本概念,或需要自己设计一些代码测试分析。这样才能培养出举一反三的能力、创新的能力。
本书所有例题都在Python 3.6.1的交互环境中调试。本书也推荐在Python 3.0的交互环境平台上教学或自学,在交互式环境中学习,有利于立即发现错误和理解错误原因。为便于阅读,文中将系统输出的内容用蓝色印出。其中,蓝色粗体为出错信息(在IDLE中是红色)。
(三)
教材是教学的剧本,是学习的向导。要编写一本好的教材,不仅需要对本课程涉及内容有深刻的了解和感悟,还要熟悉相关领域的知识,更要不断探讨和深化贯穿其中的教学理念和教育思想,写教材是件很难的事情。特别是在不断的写作中,常感到自己知识和能力的不足。由于是已经有了一些想法才开始写作的,又不忍将这些想法隐藏起来,还由于已经得到一些亲朋的支持和鼓励,也不忍辜负他们的一片热情,只能硬着头皮写下去,也幸有他们的帮助,才最后得以完成本书。在本书的写作过程中,赵忠孝教授、姚威博士、张展为博士,以及魏士婧、刘砚秋、张秋菊、史林娟、张有明、戴璐、张展赫、吴灼伟(插图)等参加了有关部分的编写工作,在此谨表谢意。
本书就要出版了。它的出版,是我在这项教学改革工作中跨上的一个新台阶。本人衷心希望得到有关专家和读者的批评与建议,也希望能多结交一些志同道合者,把这本书改得更好。
张基温
丁酉菊月于穗小海之畔
关于此书评价
暂无.
书摘内容
第5单元 Python数据处理
今天,人们已经进入信息时代。在信息时代,人类社会的支撑资源已经从物质和能源为中心,转移到了以信息资源为中心。计算机的主要职能也从早先的“计算”转移到了以数据处理(data processing)为中心的信息处理。数据是信息的记录形式。数据处理主要由对数据的采集、存储、检索、加工、变换和传输等环节组成。这些处理必须以强大的数据存储为支撑,并且还依赖于机器的速度和软件的处理方式。迄今为止,数据处理的软件技术已经呈现出文件系统和数据库两大基本技术平台。Python作为一种程序设计语言,也具有了对文件技术和数据库技术的支撑。
5.1 Python文件操作
5.1.1 文件对象及其操作过程
1. 文件及其类型
文件(file)是建立在外存中的数据容器,由这种容器类可以创建具体的文件实例对象。这种基于外存的容器与基于内存的容器之间最大的区别在于所存放的内容可以长期保存,不受停电、关机、程序结束的影响。
文件可以有如下一些分类方法。
1)按照存储的内容分类
按照存储的内容性质,文件可以分为程序文件和数据文件两大类。程序文件存储的内容是程序。Python程序文件以.py为后缀,而数据文件的后缀则以内容和用途等不同而异。
2)按照读写顺序分类
按照读写方式,文件分为顺序读写文件(简称顺序文件)和随机读写文件(简称随机文件)两种。顺序文件只能按照先后顺序进行读写,程序文件就是顺序文件。随机文件可以在文件的任意位置进行读写。
3)按照编码方式分类
按照编码方式,数据文件分为文本文件(text file)和二进制文件(binary file)两种。它们以文件名后缀相区分,文本文件的文件名后缀为.txt,二进制文件的文件名后缀为.dat。
文本文件以字符为单位进行存储,即文本文件是字符串组成的文件。纯文本文件(txt文件)、HTML文件和XML文件都是常见的文本文件。文本文件的存储与解释,与采用的编码方式有关,并且需要编码/解码环节。最早的编码采用ASCII,用1B(8b)表示一个字符。后来出现了Unicode编码,用4B(32b)表示一个字符。ASCII占用的存储空间小,但能表示的字符数量少。Unicode表示的符号数量达100多万个(囊括了世界上绝大部分语言文字),但是占用的存储空间也很大。为此人们开发出了UFT-8,它可以根据符号的种类自动选择编码的长短,例如,用1B表示英文字符,用3B(24b)表示中文文字等。Python 3.0以后开始全面支持Unicode,并能够自动对文本进行UFT-8编码和解码处理。
二进制文件以字节为单位进行存储,即二进制文件是字节串组成的文件。一般不可显示的数据,如音频、图像、视频等数据都以二进制文件存储。对二进制文件的操作,不需要任何形式的编码和解码处理。为了将音频、图像、视频等信号转变为字节串,需要专门的软件。这些软件可以由一些序列化模块提供,如struct、pickle、json、marshal、shelve等。
4)按照缓冲区的使用情况分类
缓冲区是内存中的一个区域,它一端连接CPU,另一端连接外部存储设备。如图5.1所示,缓冲区分为输入缓冲区和输出缓冲区。
图5.1 数据文件与缓冲区
文件缓冲区可以提高高速设备的效率。因为CPU是高速设备,外部存储器是低速设备。若两种设备直接连接进行数据交换,必然要使高速设备按照低速设备的速度工作,这样就大大降低了高速设备的使用效率。在两者之间增加一个缓冲区,使高速设备只在需要时才与缓冲区打交道,其他时间可以从事别的工作,从而大大提高了使用效率。这样也就避免频繁地启动低速的外部存储设备。外部存储设备一般采用磁盘存储器。磁盘存储器每一次读写都要移动磁头并寻找磁道扇区。使用缓冲区,可以将要写入磁盘的数据装满缓冲区后才一起送到磁盘,不用则每一次读写操作都要启动一次磁头。
文件操作比较依赖操作系统的I/O控制。通常标准I/O可以提供3种类型的缓冲区。
(1)全缓冲区。这种缓冲方式要求填满整个缓冲区后才进行I/O系统调用操作。对于磁盘文件的操作通常使用全缓冲的方式访问。
(2)行缓冲区。在这种情况下,当在输入和输出中遇到换行符时,标准I/O库函数将会执行系统调用操作。当所操作的流涉及一个终端时(例如标准输入和标准输出),使用行缓冲方式。因为标准I/O库每行的缓冲区长度是固定的,所以只要填满了缓冲区,即使还没遇到换行符,也会执行I/O系统调用操作。
(3)无缓冲区。无缓冲区是指不进行缓存,直接调用系统调用。
2. 文件对象
在Python中,一切皆对象。对于文件操作来说,程序要创建的“对象”并非文件,而是应用程序与要读写的文件之间的通道。这个通道在Windows系统中称为文件句柄(file handle),在UNIX/Linux系统中称为文件描述符,也可以将其统称为文件标签。通过它,可以获取或建立文件的有关信息。只有这个通道建立了,才能有效地进行文件的读写等 操作。
此外,在创建文件对象的同时,系统还会自动创建3个标准I/O对象。
(1)stdin(标准输入)。
(2)stdout(标准输出)。
(3)stderr(标准错误输出)。
这3个对象都与终端连接,可以方便数据的输入与输出。
3. 文件对象的操作过程
不管是文本文件,还是二进制文件,它们的操作过程大体上都分为三步:创建文件对象(即打开文件)、文件读写等操作和关闭文件。
1)打开文件
打开文件是创建文件对象的操作,如上所述,创建了文件对象,就拿到了操作系统对这次文件操作的令牌——文件句柄或文件描述符,就可以获得对文件进行操作的权限,以及可以使用的缓冲区。
2)文件操作
文件对象创建之后,就可以对文件进行操作了。操作内容的核心是读写。读就是从外存中将数据读到内存程序中,写就是将程序中的数据写向外存。
3)关闭文件
如前所述,在文件操作时,各种操作的数据都会首先保存在缓冲区中,除非缓冲区满或执行关闭操作,否则不会将缓冲区中的内容写到外存。文件关闭操作的主要作用是将留在缓冲区的信息最后一次写入外存,切断程序与外存中该文件的通道。如果不执行文件关闭——关闭文件标签,就停止程序运行,就有可能丢失信息。
文件关闭要使用文件对象的方法close()。
5.1.2 文件打开函数open()
1.open()的语法
通常,把文件对象的创建形象地称为文件打开。在Python中,最常用的文件打开方式是使用Python的内置函数open()。它执行后创建一个文件对象和3个标准I/O对象,并返回一个文件描述符(句柄)。其语法如下。
open(filename[,mode[,buffering[,encoding[,errors[, newline[,closefd=True]]]]]])
2. 参数说明
1)filename:文件名
filename是要打开的文件名,是open()函数中唯一不可或缺的参数。通常,上述filename是包含了文件存储路径在内的完整文件名。只有被打开的文件位于当前工作路径下时,才可以忽略路径部分。
为了把文件建立在特定位置,可以在交互环境下用os模块中的os.mkdir()函数。
代码5-1 创建一个文件夹。
>>> import os
>>> os.mkdir((‘D:myPythonTest’))
如果在给定路径或当前路径下找不到指定的文件名,将会触发IOError。
2)mode:文件打开的模式
文件打开时需要指定打开模式。打开模式主要用于向系统请求下列资源。
(1)打开后是进行文本文件操作(以’t’表示),还是二进制文件操作(以’b’表示),以便系统进行相应的编码配置。
(2)打开后是要进行读操作(以’r’或缺省表示),还是写操作(以’w’表示覆盖式从头写,用’a’表示在文件尾部追加式写)或读写操作(以’+’表示),以便系统为其配备相应的缓冲区、建立相应的标准I/O对象并初始化文件指针位置是在文件头(’r’或缺省、’w’),还是在文件尾(’a’)。
(3)用’U’表示以通用换行符模式打开。一般说来,不同平台用来表示行结束的符号是不同的, 例如 n、r, 或者 rn 。如果只写一种处理换行符的方法,就无法被其他平台认可,若要为每一个平台都写一个方法又太麻烦了。为此,Python 2.3 创建了一个特殊换行符newline(n)。当使用 ‘U’ 标志打开文件时,所有的行分隔符(或行结束符,无论它原来是什么)通过 Python 的输入方法(例如read())返回时都会被替换为newline(n),同时还用对象的 newlines 属性记录它曾“看到的”文件的行结束符。
上述基本的打开模式符号可以组合成表5.1所示的文件打开模式。
表5.1 组合的文件打开模式
文件打开模式
操 作 说 明
文本文件
二进制文件
r
rb
以只读方式打开,是默认模式,必须保证文件存在
rU 或 Ua
以读方式打开文本文件, 同时支持文件含特殊字符(如换行符)
w
wb
以写方式新建一个文件,若已存在则自动清空
a
ab
以追加模式打开:若文件存在,则从 EOF 开始写;若文件不存在,则创建新文件写
r +
rb+
以读写模式打开
w+
wb+
以读写模式新建一个文件(参见 w)
a+
ab+
以读写模式打开(参见 a)
3)buffering:设置buffer
0:代表buffer关闭(只适用于二进制模式)。
1:代表line buffer(只适用于文本模式)。
>1:表示初始化的buffer大小。
若不提供该参数或者给定负值,则按照如下系统默认缓冲机制进行。
(1)二进制文件使用固定大小缓冲区。缓冲区大小由io.DEFAULT_BUFFER_SIZE指定,一般为4096B或8192B。
(2)对文本文件,若isatty()返回True,使用行缓冲区;其他与二进制文件相同。
4)errors:报错级别
strict:字符编码出现问题时会报错。
……
Python大学教程/高等教育质量工程信息技术系列示范教材最新最全的试读、书评、目录、简介信息由Python中文网整理提供。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试