Python可以这样学pdf

2018年10月18日23:06:44 发表评论 870

信息量大、案例丰富、实用性强。全书包含近200个案例和上千段代码,涉及Python基本语法和数据类型,以及GUI、网络应用、数据库、密码学、科学计算与可视化、大数据、图形图像处理等多个领域的开发,书中一些代码进行简单拼凑就可以满足实际工作中需要的很多功能。

深度与广度兼顾。?#39280;鯬ython编程模式,通过小提示、小技巧、注意、拓展知识等形式?#23454;?#20171;绍标准库的工作原理、内置函数的高级用法以及代码优化和安全编程知识,同时还补充了很多扩展库的小应用,满足不同层次读者需要。

语言轻松愉快,寓教于乐。以Python知识和应用为主线,偶尔穿插一点太极拳论、道德经、易经、古诗词和其他一些文学作品中的名言名句和小故事,部分题目还给出了非常幽默的答案。

注释量大。书中几乎每段重要代码都配有相关的注释,让读者能够在最短时间内理解代码的编写思路和要点,大幅?#20154;?#30701;阅读和学习时间。

Python可以这样学 内容简介

《Python可以这样学》共分16章,对Python内部工作原理进行了一定深度的?#39280;觶?9%以上的案例代码使用Python 3.5.1实现,?#24425;?#29992;于Python 3.4.x(除少数几个新特性之外)和*新版本Python 3.5.2以及Python 3.6.0,极个别案例使用Python 2.7.11实现(同样适用于其他版本Python 2.7.x,包括*新的Python2.7.12),?#23454;?#20171;绍了Python代码优化、系统编程和安全编程的有关知识,满足不同层次读者的需要。另外,书?#22411;?#36807;小提示、小技巧、注意拓展知识等形式介绍了更多的内容,全部内容远?#26085;陆?#30446;录所显示的要多,需要?#38505;?#38405;读才能真正领会其中的?#26053;睢?/p>

本书适合作为Python程序员的开发指南,也可以作为高等院校计算机专业、软件工程专业等专业的Python教材,还可以作为Python爱好者的指导用书。

Python可以这样学 目录

第1章Python基础1

1.1Python是一?#36136;裁?#26679;的语言1

1.2Python开发环境2

1.2.1百?#33402;?#40483;的?#27604;?#26223;象2

1.2.2IDLE简单使用6

1.3变量、运算符与表达式9

1.3.1Python变量与内置数据类型9

1.3.2常用内置函数15

1.3.3运算符与表达式21

1.3.4人机对话基本接口25

1.4模块安装与使用28

1.4.1安装Python扩展库28

1.4.2模块导入与使用30

1.4.3编写自己的模块和包32

第2章Python序列35

2.1列表与列表推?#38469;?6

2.1.1列表创建与?#22659;?6

2.1.2列表常用方法38

2.1.3列表推?#38469;?6

2.1.4切片50

2.2元组与生成器推?#38469;?4

2.2.1元组54

2.2.2生成器推?#38469;?5

2.3字典57

2.3.1字典创建和元素添?#21360;?#20462;改与?#22659;?7

2.3.2访?#39318;?#20856;对象的数据59

2.3.3案例精选61

2.4集合63[1]〖2〗Python可以这样学[1]目录〖2〗2.4.1集合基础知识63

2.4.2集合操作与运算64

2.4.3案例精选67

2.5序列解包69

第3章程序控?#24179;?#26500;与函数设计71

3.1选择结构71

3.1.1条件表达式71

3.1.2选择结构的几种形式73

3.1.3案例精选79

3.2循环结构82

3.2.1for循环与while循环的基本语法82

3.2.2break与continue语句83

3.2.3循环代码优化技巧84

3.2.4案例精选86

3.3函数设计与使用90

3.3.1基本语法91

3.3.2函数参数不得不说的几件事94

3.3.3变量作用域99

3.3.4lambda表达式102

3.3.5案例精选104

第4?#26053;?#21521;对象程序设计122

4.1基础知识122

4.1.1类的定义与使用122

4.1.2私有成员与公有成员123

4.1.3数据成员125

4.1.4方法126

4.1.5属性129

4.1.6继承131

4.1.7特殊方法与运算符重载134

4.2案例精选135

4.2.1自定义数组135

4.2.2自定义矩阵141

4.2.3自定义队列147

4.2.4自定义栈151

4.2.5自定义二叉树154

4.2.6自定义有向图157

4.2.7自定义集合158

第5章字符串与正则表达式165

5.1字符串165

5.1.1字符串格式化的两种形式168

5.1.2字符串常用方法171

5.1.3案例精选186

5.2正则表达式190

5.2.1正则表达式语法与?#24189;?#24335;扩展语法190

5.2.2re模块方法与正则表达式对象193

5.2.3案例精选199

第6章文件与文件夹操作206

6.1文件对象常用方法与属性207

6.2文本文件操作案例精选209

6.3二进制文件操作案例精选217

6.3.1使用pickle模块读写二进制文件217

6.3.2使用struct模块读写二进制文件219

6.3.3使用shelve模块操作二进制文件220

6.3.4使用marshal模块操作二进制文件220

6.4文件与文件夹操作221

6.4.1标准库os、os.path与shutil简介221

6.4.2案例精选227

第7章异常处理结构、代码测试与调试252

7.1异常处理结构252

7.1.1异常是?#35009;?52

7.1.2Python内置异常类层次结构254

7.1.3常见异常处理结构形式255

7.2代码测试262

7.2.1doctest263

7.2.2单元测试264

7.3代码调试270

7.3.1使用IDLE调试270

7.3.2使用pdb调试273

阶段性寄语278

第8章数据库应用开发279

8.1使用Python操作SQLite数据库279

8.1.1Connection对象280

8.1.2Cursor对象281

8.1.3Row对象284

8.2使用Python操作其他关系型数据库285

8.2.1操作Access数据库285

8.2.2操作MS SQL Server数据库286

8.2.3操作MySQL数据库288

8.3操作MongoDB数据库290

第9章网络应用开发293

9.1计算机网络基础知识293

9.2Socket编程295

9.2.1UDP编程296

9.2.2TCP编程298

9.2.3网络嗅探器300

9.2.4多进程端口扫描器302

9.2.5代理服务器端口?#25104;?#21151;能的实现305

9.2.6自己编写FTP通信软件308

9.3域名解析与网页爬虫313

9.3.1网页内容读取与域名分析313

9.3.2网页爬虫315

9.3.3scrapy框架316

9.3.4BeautifulSoup4318

9.4网站开发323

9.4.1使用IIS运行Python CGI程序323

9.4.2Python在ASP.NET中的应用325

9.4.3Flask框架简单应用327

9.4.4django框架简单应用328

第10章多线程与多进程333

10.1多线程编程334

10.1.1线程创建与管理336

10.1.2线程同步?#38469;?39

10.2多进程编程346

10.2.1进程创建与管理347

10.2.2进程间数据交换347

10.2.3进程同步?#38469;?50

第11章大数据处理351

11.1大数据简介351

11.2MapReduce框架352

11.3Spark应用开发356

第12章图形编程与图像处理361

12.1图形编程361

12.1.1绘制三维图形361

12.1.2绘制三次贝塞尔曲线364

12.1.3纹理?#25104;?65

12.1.4响应键盘?#24405;?68

12.1.5光照模型369

12.2图像处理372

12.2.1pillow模块基本用法372

12.2.2计算椭圆中心375

12.2.3动态生成比例分配图376

12.2.4生成验证码图片377

12.2.5gif动态图像分离与生成379

12.2.6材质贴图380

12.2.7图像融合381

12.2.8棋盘纹理生成383

第13章数据分析与科学计算可视化384

13.1扩展库numpy简介384

13.2科学计算扩展库scipy393

13.2.1数学、物理常用常数与单位模块constants394

13.2.2特殊函数模块special395

13.2.3信号处理模块signal395

13.2.4图像处理模块ndimage397

13.3扩展库pandas简介401

13.4统计分析标准库statistics用法简介405

13.5matplotlib407

13.5.1绘?#26222;?#24358;曲线408

13.5.2绘制散点图408

13.5.3绘?#31080;?#29366;图410

13.5.4绘?#25340;?#26377;?#24418;谋?#31614;和图例的图410

13.5.5绘制图例标签中带有公式的图411

13.5.6使用pyplot绘制,多个图形单?#32769;?#31034;412

13.5.7绘制三维参数曲线413

13.5.8绘制三维图形414

13.5.9使用指令绘制自定义图形416

13.5.10在tkinter中使用matplotlib417

13.5.11使用matplotlib提供的组件实现交互式图形显示419

13.5.12根据实时数据动态更新图形421

13.5.13使用Slider组件调整曲线参数422

第14章密码学编程425

14.1经典密码算法425

14.1.1恺撒密码算法425

14.1.2维吉尼亚密码427

14.1.3换位密码算法428

14.2安全哈希算法429

14.3对称密钥密码算法DES和AES432

14.4非对称密钥密码算法RSA与数?#26234;?#21517;算法DSA433

14.4.1RSA433

14.4.2DSA435

第15章tkinter编程精彩案例436

15.1用户登录界面436

15.2选择类组件应用438

15.3简单文本编辑器441

15.4简单画图程序445

15.5电?#37038;?#38047;449

15.6简单动画451

15.7多窗口编程454

15.8屏幕任意区域截图456

15.9音乐播放器458

15.10远程桌面监控系统462

第16章课堂教学管理系?#25104;?#35745;与实现466

16.1功能简介466

16.1.1教师端功能466

16.1.2学生端功能467

16.2数据库设计468

16.3系统总框架与通用功能设计469

16.4数据导入功能473

16.4.1学生名单导入473

16.4.2题库导入473

16.5点名与加分功能475

16.5.1在线点名475

16.5.2离线点名与加分477

16.6随机提问功能480

16.7在线收作业功能482

16.7.1学生端482

16.7.2教师端483

16.8在线自测与在线?#38469;?#21151;能485

16.8.1学生端486

16.8.2教师端488

16.9信息查看功能490

16.10数据导出功能492

16.11其他辅助功能493

16.11.1防作弊功能493

16.11.2服务器自动发现功能493

16.11.3Word版试卷生成功能494

结束语496

附录A本书中例题清单497

附录B本书中插图清单503

附录C本书中表格清单507

附录D本书?#22411;?#23637;知识摘要清单508

参考文献513

Python可以这样学 精彩文摘

第3章程序控?#24179;?#26500;与函数设计

3.1选 择 结 构

生活中处处充满?#25628;?#25321;: 如果周末不下雨我就约朋友去爬山,否则就去教学楼大厅里打太极拳;如果某个同学平时学习很?#38505;?#20294;是期末?#38469;?#21069;确实因为临时有事耽误了复习而没有考好,只要差得不太多我也一样给打?#26696;瘢?#21435;市场买菜的时候比较一下,哪家的菜又好又便宜就买哪家的;诸如此类,我们时刻都在根据实际条件做出这样或那样的选择。编写程序?#24425;?#22914;此,当某个条件得到满足?#26412;?#21435;做特定的事情,否则就做另一件事情,这就是选择结构。

3.1.1条件表达式

在选择结构和循环结构中,都要根据条件表达式的?#36947;慈范?#19979;一步的执行流程。条件表达式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空迭代对象,Python解?#25512;?#22343;认为与True等价。从这个意义上来讲,所有的Python合法表达式都可以作为条件表达式,包括含有函数调用的表达?#20581;?#20363;如: >>> if 3:#使用整数作为条件表达式

print(5)

5

>>> a=\[1, 2, 3\]

>>> if a:#使用列表作为条件表达式

print(a)

\[1, 2, 3\]

>>> a=\[\]

>>> if a:

print(a)

else:

print('empty')

empty

>>> i=s=0

>>> while i <= 10:#使用关系表达式作为条件表达式s += i

i += 1

>>> print(s)

55

>>> i=s=0

>>> while True:#使用常量True作为条件表达式

s += i

i += 1

if i>10:#符合特定条件?#31508;?#29992;break语句退出循环

break

>>> print(s)

55

>>> s=0

>>> for i in range(0, 11, 1):#遍历序?#24615;?#32032;

s += i

>>> print(s)

55[1]〖2〗Python可以这样学[1]第3章程序控?#24179;?#26500;与函数设计〖2〗关于表达式和运算符的详细内容在1.3.3节中已有介绍,这里不再赘述,只重点介绍一下比较特殊的几个运算符。首先是关系运算符,与很多语言不同的是,在Python中的关系运算符可以连续使用,例如:>>> print(1<2<3)

True

>>> print(1<2>3)

False

>>> print(1<3>2)

True在Python中,条件表达式中不?#24066;?#20351;用赋值运算符“=?#20445;?#36991;免了其他语?#28798;形?#23558;关系运算符“==”写作赋值运算符“=?#36125;?#26469;的麻?#24120;?#20363;如,?#26053;?#30340;代码在条件表达式中使用赋值运算符“=”将抛出异常,提示语法错误。>>> if a=3:#条件表达式中不?#24066;?#20351;用赋值运算符

SyntaxError: invalid syntax

>>> if(a=3)and(b=4):

SyntaxError: invalid syntax比较特殊的运算符还?#26032;?#36753;运算符and和or,这两个运算符具有短?#38750;?#20540;或惰性求值的特点,简单地说,就是只计算必须计算的表达式的值。以and为例,对于表达?#20581;?#34920;达式1 and 表达式2”而言,如果“表达式1”的值为False或其他等价值?#20445;?#19981;论“表达式2”的值是?#35009;矗?#25972;个表达式的值?#38469;荈alse,此时“表达式2”的值无论是?#35009;?#37117;不影响整个表达式的值,因?#31169;?#19981;会被计算,从而减少不必要的计算和判断。另外,Python中的逻辑运算符在某些方面和其他语言也有所不同,例如: >>> 3 and 5

5

>>> 3 or 5

3

>>> 0 and 5

0

>>> 0 or 5

5

>>> not 3

False

>>> not 0

True?#26053;?#30340;函数使用指定的分隔符把多个字符串连接成一个字符串,如果用户没有指定分隔符则使用?#27721;擰?gt;>> def Join(chList, sep=None):

return(sep or ',').join(chList)#注意:参数sep不是字符串时会抛出异常

>>> chTest=\['1', '2', '3', '4', '5'\]

>>> Join(chTest)

'1,2,3,4,5'

>>> Join(chTest, ':')

'1:2:3:4:5'

>>> Join(chTest, ' ')

'1 2 3 4 5'当然,也可以把上面的函数直接定义为?#26053;?#24102;有默?#29616;?#21442;数的形式: >>> def Join(chList, sep=','):

return sep.join(chList)小技巧: 在设计包含多个条件的条件表达式?#20445;?#22914;果能够大概预测不同条件失败的概率,并将多个条件根据and和or运算符的短?#38750;?#20540;特性来组织顺序,可以大幅度提高程序运行效率,减少不必要的计算,这?#24425;?#20110;代码优化的内容。

拓展知识: 逻辑运算符与常见电路连接方式的相似之处。大家应该都学过高?#24418;?#29702;,还记得并联电路、串联电路、短路这样的概念吗?可以做个简单类比,or运算符类似于并联电路,只要有一个开关是通的那么灯就是亮的;and运算符类似于串联电路,必须所有开关是通的那么灯才是亮的;not运算符类似于短路电路,如果开关通?#22235;?#20040;灯就灭了,如图31所示。

图31逻辑运算符与几种电路的类比关系

3.1.2选择结构的几种形式

选择结构通过判断某些特定条件是否满足来决定下一步的执行流程,是非常重要的控?#24179;?#26500;。常见的有单分支选择结构、双分支选择结构、多分支选择结构以及?#30701;?#30340;分支结构,形式比较灵活多变,具体使用哪一种最?#26632;故?#21462;决于要实现的业务逻辑。循环结构和异常处理结构中也可以带有else子句,也可以看作是特殊形式的选择结构。

1. 单分支选择结构

单分支选择结构是最简单的一种形式,其语法如下所示,其中表达式后面的冒号“:?#31508;?#19981;可缺少的,表示一个语句块的开始,后面几种其他形式的选择结构和循环结构中的冒?#20051;彩?#24517;须要有的。图32单分支选择结构

if 表达式:

语句块当表达式值为True或其他等价值?#20445;?#34920;示条件满足,语句块将被执行,否则该语句块将不被执行,继续执行后面的代码(如果?#26657;?#22914;图32所示。

?#26053;?#30340;代码简单演示了单分支选择结构的用法: x=input('Input two numbers:')

a, b=map(int, x.split())

if a>b:

a, b=b, a#序列解包,交换两个变量的值

print(a, b)注意: 在Python中,代码的缩进非常重要,缩进是体现代码逻辑关系的重要方式,同一个代码块必须保证相同的缩进量。有的老师让学生学习Python的原因之一就是Python对代码排版或布局的严格要求可以培养学生严谨的习惯。而实际上,只要遵循一定的?#32423;ǎ琍ython代码的排版是可以?#26723;?#35201;求的,例如?#26053;?#30340;代码: >>> if 3>2: print('ok')#如果语句较短,可以直接写在分支语句后面

ok

>>> if True:print(3);print(5)#在一行写多个语句,使用分号分隔

3

5小提示: 在上面代码中,“a, b=b, a?#31508;荘ython序列解包的用法,用来交换两个变量的值,等价于C语言的如下3条代码(假设变量已经声明并且类型正确),关于序列解包更多内容请参考2.5节。c=a;

a=b;

b=c;2. 双分支选择结构

双分支选择结构的语法为if 表达式:

语句块1

else:

语句块2当表达式值为True或其他等价值?#20445;?#25191;行语句块1,否则执行语句块2,如图33所示。

图33双分支选择结构

?#26053;?#30340;代码演示了双分支选择结构的用法: >>> chTest=\['1', '2', '3', '4', '5'\]

>>> if chTest:

print(chTest)

else:

print('Empty')

\['1', '2', '3', '4', '5'\]拓展知识: Python还提供了一个三元运算符,可以实现与选择结构相似的效果。语法为value1 if condition else value2当条件表达式condition的值与True等价?#20445;?#34920;达式的值为value1,否则表达式的值为value2。另外,value1和value2本身也可以是复杂表达式,也可以包含函数调用。?#26053;?#30340;代码演示了上面的表达式的用法,可以看出,这个结构的表达式也具有惰性求值的特点。>>> a=5

>>> print(6)if a>3 else print(5)

6

>>> print(6 if a>3 else 5)#注意,虽然结果与上一行代码一样,但代码含义不同

6

>>> b=6 if a>13 else 9#赋值运算符优先级低

>>> b

9

>>> x=math.sqrt(9)if 5>3 else random.randint(1, 100)

#此时还没有导入math模块

Traceback(most recent call last):

File "", line 1, in

x=math.sqrt(9)if 5>3 else random.randint(1,100)

NameError: name 'math' is not defined

>>> import math

#此时没有导入random模块,由于条件表达式5>3的值为True,所以可以正常运行

>>> x=math.sqrt(9)if 5>3 else random.randint(1,100)

#第一个条件表达式2>3的值为False,需要计算第二个表达式的值,然而此时还没有导入random模块,从而出错

>>> x=math.sqrt(9)if 2>3 else random.randint(1, 100)

Traceback(most recent call last):

File "", line 1, in

x=math.sqrt(9)if 2>3 else random.randint(1,100)

NameError: name 'random' is not defined

>>> import random

>>> x=math.sqrt(9)if 2>3 else random.randint(1, 100)最后,三元运算符是可以?#30701;资?#29992;的,可以实现多分支选择的效果,但这样的代码可读性非常不好,不建议使用。>>> x=3

>>>(1 if x>2 else 0)if f(x)>5 else('a' if x<5 else 'b')

#可以?#30701;资?#29992;,但不提倡这样用

1

>>> x=0

>>>(1 if x>2 else 0)if f(x)>5 else('a' if x<5 else 'b')

'a' 3. 多分支选择结构

多分支选择结构为用户提供了更多的选择,可以实现复杂的业务逻辑,多分支选择结构的语法为if 表达式1:

语句块1

elif 表达式2:

语句块2

elif 表达式3:

语句块3

else:

语句块n其中,关键字elif是else if的缩?#30784;O旅?#30340;代码演示了如何利用多分支选择结构将成绩?#24433;?#20998;?#31080;?#25442;到等级制。>>> def func(score):

if score>100:

return 'wrong score.must <= 100.'

elif score >= 90:

return 'A'

elif score >= 80:

return 'B'

elif score >= 70:

return 'C'

elif score >= 60:

return 'D'

elif score >= 0:

return 'E'

else:

return 'wrong score.must >0'

>>> func(120)

'wrong score.must <= 100.'

>>> func(99)

'A'

>>> func(87)

'B'

>>> func(62)

'D'

>>> func(3)

'E'

>>> func(-10)

'wrong score.must >0'4. 选择结构的?#30701;?/p>

选择结构可以进行?#30701;桌?#34920;达复杂的业务逻辑,语法如下: if 表达式1:

语句块1

if 表达式2:

语句块2

else:

语句块3

else:

if 表达式4:

语句块4图3 4代码层次与隶属关系

图书网:Python可以这样学pdf

?#20439;试聰略?#20215;格为2图书币,请先
会员充值限时优惠:充30图书币送10图书币,每个会员仅一次优惠(此活动截止本月底)。
  • 我的微信
  • 扫一扫加好友
  • weinxin
  • 微信公众号
  • 扫一扫关注
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: