《Python基础教程》读后感
前言:
一种解释型的、面向对象的、带有动态语义的高级程序设计语言。
第一章 基础知识
相比C++,有点不同的是输入原始字符,不需要使用转义斜杆,只需要在字符最前面输入r,譬如:r"xxx"。
第二章 列表与元组
list也有一系列的函数,跟C++的stl类似,了解后再慢慢的熟悉,代码写起来很方便。list在操作上既像是数组,又像是堆栈,仿佛把所有用起来舒服的操作都给借鉴过来了。list从设计上就考虑到要融合数组、堆栈的功能。reversed、sorted返回list。
list调用sort函数的时候,可以使用自定义的比较函数。
第三章 使用字符串
“如果使用list或者其它序列代替tuple,那么序列就会被解释为一个值。只有tuple和dictionary可以格式化一个以上的值。”
不要出现跟python导出类型同名的文件,譬如把文件名名为string就不行,因为python代码:from string import Template,会错误的导入你自己写的string.py文件,而不是系统提供的文件。
在python3.0中,字符串都是以unicode存储的。
join,把某个字符串加入到一串序列中,把序列中的元素连接起来。
strip函数,可以去除输入字符串两端的特定字符。譬如data.strip(‘ */<’),去除那些注释信息。
第四章 字典
类似于STL的map,数据格式上可扩展性更强,数据的组织就是json格式,字典数据可以转换为元组+列表。
第五章 条件、循环和其他语句
for后面支持跟着else,当for循环不是通过break跳出时,就会执行else中的内容。
第六章 抽象
python函数的参数有非常多的支持,杂七杂八的,要记住都麻烦,还是简单最好,用的时候再查查手册。基本用法跟C、C++没多大差别。函数声明上,使用def关键字。
第七章 更加抽象
python也支持多继承,如:class subclass(base_a, base_b):...
第八章 异常
可以定义自己的异常,异常可以捕获。跟windows的try except类似。
第九章 魔法方法、属性和迭代器
相比C++多了一个叫做类函数的东西。类函数默认会给予一个cls参数,表明类信息,实例可以调用类函数。静态函数也是类、类实例也可以调用。
生成器上个有趣的知识,可以这样子理解:使用yield的函数返回一个迭代器,外界通过迭代器访问数据,数据在需要的时候才去产生,一旦产生一个可以返回的数据了,就暂停执行保存执行环境,下一次访问再继续执行。yield是2.4才加入的功能。实际上生成器(也就是包含有yield关键字的函数)返回的是一个迭代器,数据在需要的时候再去继续生成。
使用yield来处理多路径的算法极其方便。1、迭代器效果:每产生一条合适路径就返回,等这条路径输出后,继续往下执行,所以我们函数内部不需要自己去写临时合法路径存储;2、回退功能,寻找合法路径时,不需要自己去做回退逻辑,有效数据必须是能执行到yield关键之所在语句的,没有执行到不用处理(使用C、C++写,则需要做回退处理);3、无须存储临时半成品路径:yield内部的实现可能就包含了存储半成品路径的逻辑,使这个半成品路径在下次回溯的时候用上。对8皇后问题,只需要写很少的代码就可以解决。
yield可以使得数据在需要的时候再产生,也就是lazy evaluation,要lazy,所以内部必须有存储执行环境的逻辑,所以半成品数据由yield负责存储也就顺理成章了。
lazy evaluation可以用来解决一次性干会占用太多内存空间的问题。
yield的lazy思想,其实可以由程序员自己来实现,但是由python实现,则可以降低程序员的难度,方便了程序员,很多功能python已经给我们实现了,难怪pythoner说“人生苦短,我用python”。GOOD!
性能问题,python提供的这种支持,性能比较差。
python的基础知识已经看完了。
第十章 充电时刻
exec函数可以用来执行python脚本。
shelve支持了内存文件存储,代码中以字典格式存储,实际的磁盘文件是python自定义的格式。使用shelve存储的时候会产生3个文件。
正则表达式的支持(re模块),非常强大,是利器。
第十一章 文件和素材
这是专门讲解用于文件操作的方法。在之前的章节里还谈到了其他方法,如:fileinput可以读取文件、shelve可以用来做程序运行数据库,这两种方法都是有局限的,fileinput只能读取文件,shelve只能写入、读取python自定义格式的文件,从设计上来说这shelve是用于制造数据库的。
第十二章 图形用户界面
wxWidgets是一个开源的跨平台的C++构架库(framework)。wxWidgets的主体是C++构建的,但可以通过多种语言使用。wxPython就是wxWidgets的python使用入口。
使用python,可以28行代码写一个简单的文本编辑器,有GUI界面的。
后缀修改为pyw运行的时候会隐藏python dos窗口,看起来就像pyw就是一个exe,实际上当然不是了,是需要依赖python、wxPython的。
第十三章 数据库支持
python有标准化的支持,没看懂。python如何使用SQLite比较简单,看得懂,对于我来说,关键是如何熟悉SQL语句。
第十四章 网络编程
socket编程有socket模块支持,几行代码搞定一个demo。
urllib可以方便的实现很多http协议相关的操作。
Twisted是一个很好的网络库。书中介绍,来自Twisted Matrix实验室的Twisted是一个事件驱动的Python网络框架,原来是为网络游戏开发的,现在被所有类型的网络软件使用。在Twisted中,需要实现事件处理程序,这很像在GUI工具包中做的那样。
使用:安装Twisted、zope。
第十五章 Python和万维网
‘屏幕抓取’,这里说的是使用工具把网页的内容下载下来。简单的屏幕抓取程序是这样子:使用urllib库下载url,然后使用正在表达式库re解析网页,得到关键数据。
Tidy库,用于修复不规范且随意的HTML的工具。需要下载Tidy的DLL封装版本mxTidy,或者下载Tidy的exe版本,然后通过exe调用得到解析后的正确html。
HTMLParse是一个封装了html解析的库。
CGI模块可以很方便的实现CGI。
mod_python无法安装使用,看起来已经是过时的产物了。把官网上下载到的mod_python.dll加入到httpd.conf的加载模块中,会导致Apache无法启动,怀疑必须使用.os文件才能加载。.os文件找不到,可能需要自己去编译产生。所以mod_python无法实验如何使用,估计python脚本代码不需要修改,只是用来加快后台的处理速度。
stackoverflow有人说,mod_python是被淘汰了:http://stackoverflow.com/questions/3225498/mod-python-for-python-2-7“Support for mod_python has been deprecated, and will be removed in Django 1.5. If you are configuring a new deployment, you are strongly encouraged to consider using mod_wsgi or any of the other supported servers.”更好的是使用wsgi。
之后的内容主要是以知识链接为主,没有编码内容,暂不细看。
第十六章 测试
讲解测试驱动开发在python上如何实践,没必要看。
第十七章 扩展Python
Python可以使用del,但删除的可能仅仅是它自己,而无法删除它所引用的对象。譬如:y = ['a']; x = y; del x; 这时候,y所指向的列表还是存在的,因为x还指向了该对象,可以理解为:引用计数不是0所以没有回收对象。
使用SWIG架起python跟C++的桥梁,非常方便。
第十八章 程序打包
Distutils是个不错的打包工具,可以把自己写的python库打包成安装包。py2exe是一个Python Distutils模块的扩展,能够将python脚本转换为windows下的exe,exe使用者无需安装python,也可以运行。一个简单的HelloWorld脚本使用py2exe工具之后,未压缩总共有5MB大小。python的工具使用起来非常简单,如没有定制化的要求,那也够用了。
第十九章 好玩的编程
讲述一些简单的设计思想:可配置、日志、自动化测试。
第二十章 项目1:即时标记
讲述如何使用python对字符串做处理,添加标记,譬如:纯文本转为HTML格式文本。
第二十一章 项目2:画幅好画
reportlab模块、PIL模块。
第二十二章 项目3:万能的XML
xml模块解析xml文本生成html文本。
第二十三章 项目4: 新闻聚合
使用nntplib、urllib模块获取新闻服务器、网页,并做解析输出为自定义的html网页。
第二十四章 项目5:虚拟茶话会
asyncore、asynchat模块。这两个模块是对socket模块的封装,可用于实现异步。
在局域网下做了测试,没有问题。如果要对外网开放,这需要有一个对外网的IP和端口。
书中的例子有设计的味道,server--session--room(loginroomlogoutroommainroom),挺好的。
第二十五章 项目6:使用CGI进行远程编辑
注意python里用print返回的字符串不能随便删除换行,譬如在Content-type: text/html后面的换行就不能随便的删除掉它。
apache的配置、html的知识、python的知识,搞定。
第二十七章 项目8: 使用XML-RPC进行文件共享
--------------------
入门书籍,后面当作工具书籍来查看。要多写、多读python代码,才不会忘记语法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-11-29 每日总结60