好久没有更新了,最近买了几本书啃了半个月。越学越觉得自己无知,必须要好好加强一下基础,其中买了Python学习手册,本来看二手有便宜的,但是是第四版的,我买的最新版第五版18年出的讲的是3.3,但现在是3.8了,所以对于第四版我是极其不推荐的。
言归正传,写这个专题主要是精简一下书上内容,添加一些样例,对于书上的每章总结记录下来,瞎编一些自己的理解。
这本书是译作,或多或少有一些翻译问题,语句可能不是十分通顺,我再理解一遍可能会有许多专业名词在大意不变的情况下发生改变,望见谅。
第一章:问答环节
为什么使用Python:
软件质量:Python注重可读性,一致性,和软件质量。设计之初就具有良好的可读性,因此具备了比传统脚本语言更优秀的可用性和可维护性;一致性保障了其易于理解。(可读性就是真理!!!)
开发者效率:相较于C,C++,JAVA等编译/静态语言,Python的开发者效率提升了数倍,代码长度往往只有C++或Java的五分之一到三分之一,意味着录入更少的代码,调试更少的代码,维护更少的代码;Python代码可以立即执行,而无需传统的编译/静态语言所必须的编译及链接等步骤,进一步提升效率(代码短就是生产效率!)
程序的可移植性:绝大多数Python程序不做任何改变即可在所有主流计算机平台上运行,如Linux和Windows之间只需要简单的在机器间复制代码即可。Python提供了多种可选的代码库,其中包括图形界面,数据库接入,基于web的系统等在内的各种程序,其中甚至包括程序启和文件夹处理这样的操作系统级接口,也成为了python可移植性的一部分。(说一下就自己的理解,python的许多库都是可以通用的,在不同的操作系统上运行)
标准库的支持:Python内置了众多预构建并可移植的功能模块,这些功能模块叫做标准库。并且可以通过自行开发库或第三方应用来扩展。(就是有许多第三方库支持还有许多内置的标准库,可以干很多事,中文分词,网络爬虫,机器学习啥都干;并且规模还在不断扩大)
组件集成:Python绝不仅仅是一个独立的工具。Python脚本可以通过多种集成机制轻松的与应用程序的其他部分进行通讯。这种集成使python成为实现产品定制和扩展的工具。Python代码可以调用C,C++的库,可以被C,C++调用,可以与Java和NET组件集成,可以与COM和silverlight等框架通讯,可以通过串行端口与设备进行连接。。。(我们并不孤单,有什么事办不了可以找人帮忙,我们都是工具人)
享受乐趣:Python的易用性和强大内置工具使编程成为一种乐趣,而不是琐碎的重复劳动,这是一个难以表达的优点,对于提升开发者效率有很重要的帮助(对于我良好的可读性是编程的乐趣,所想即可为,所为皆我想)
作者认为软件质量和开发者效率是对于绝大多数python用户而言也许是Python最具有吸引力的优点,值得用更大篇幅进行论述。
但是我不想,我现在要做的是把书读薄,(主要是我是纯手打累啊)
该写还得写啊,
软件质量:
概括地说,软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。从管理角度对软件质量进行度量, 可将影响软件质量的主要因素划分为三组,分别反应用户在使用软件产品时的三种不同倾向或观点:产品运行(正确性、健壮性、效率、完整性、可用性、风险);产品修改(可理解性、可维修性、灵活性、可测试性);产品转移(可移植性、可再用性、互运行性)
从设计之初,Python就秉承了一种独特的简洁而极具可读性的语法,以及一种高度一致的编程模型。Python似乎是‘’人脑思维直觉吻合‘’。Python是一个设计风格始终如一的开发平台,可以保证开发出具有一致性的代码。
从哲学理念上讲,Python采取了一种所谓极简主义的设计理念,这意味着尽管实现某一编程任务通常有多种方法,往往只有一种方法是显而易见的,还有有些是不那么明显的方法,而且贯穿整门语言都采用这一紧凑的交互形式。(这是书上原话,翻译的作品读着是真难受啊;就当成在编程时都采用简洁的方式,即显而易见的)此外,Python并不会为你做任意的选择,当交互模式模棱两可时,使用简洁明了的方式要优于用魔法(要用魔法打败魔法)。
明确胜于隐晦,简单胜于复杂!!!
import this
除了以上的设计宗旨,Python还包含模块化,OPP在内的一些工具来提升重用性(以前学习软件质量保证时没感觉有什么用,现在回头看学的东西都是有用的),而且Python致力于提升编码质量,Python程序员也都很自然的秉承了这一理念。(吹逼是要所有人来负责的)
开发者效率:
无论在什么背景下,效率都很重要。Python作为开发工具均以付出更少的经历完成更多的任务而脱颖而出(人生苦短,我用Python)。Python致力于开发速度的最优化,其简单的语法,动态类型,无需编译,内置工具等特性使程序员能够快速完成项目开发,而使用其他开发语言则至少需要几倍的时间。其最终结果就是,Python把开发者效率提升数倍。
自己总结一下为什么使用Python
首先是质量和效率,简洁而具有高度可读性的代码,设计风格始终如一保证了代码的一致性,极简主义对质量的追求决定了代码质量;简洁的语法,动态类型,无需编译,众多库等特性提升了开发效率。
优秀的可移植性以及海量的标准库的支持,组件集成使Python不是一个独立的工具,与其他工具通讯更好的完成任务。享受乐趣(能挣钱就行)
Python是一门“脚本语言’’吗
(你说是就是吧)
Python是一门通用类型的编程语言,而它时常扮演者脚本语言的角色。一般来说,Python可以定义为一门面向对象的脚本语言。但是!!!Python是一门融合了面向过程、函数式和面向对象编程范式的多目标语言。(百度百科说:是一种面向对象的动态类型语言,解释型脚本语言;就是听一乐,怎么说都行,叫这个真干嘛啊,咋的都是那个Python,但是公认的是动态类型,解释型)
无论如何,脚本一词如同胶水一样粘在Python上,这不同于其他需要编写大量繁复代码的语言。人们往往用‘脚本’(script)而不是‘程序’(program)一词来描述Python的代码文件。
出于对这项传统的沿袭,脚本和程序是可以相互代替的,其中脚本往往倾向于描述简单的顶层代码文件,而程序则是用来描述那些相对复杂一些的多文件应用。
由于脚本语言众说纷纭,因此,一些人也该认为这词在Python中的使用应该被完全禁止(+1)。实际上,人们往往给Python冠以下三个不同的角色,其中有些角色相对于其余的角色更重要(这里我感觉好像是翻译有一点问题,感觉应该是 人们认为python是脚本语言因为以下三个原因 ):
shell工具:
偶尔当人们听到Python是脚本语言时,他们会认为Python是一个面向系统的脚本语言代码工具。这些程序往往在命令运行中,实现诸如文本文件的处理以及启动其他程序等任务。
Python程序当然能够以这样的角色工作,但这仅仅是Python应用范围的很小一部分。它不止是一种很好的shell脚本语言(我会这个,不能说我只会这个)
控制语言:
对于其他人而言,脚本语言意味着控制或重定向其他应用程序组件的‘胶水’层。Python常常部署在大型应用中。如测试硬件设备时,Python程序可以调用能够进行硬件底层访问的相关组件。类似的,在终端用户产品定制的过程中,应用程序可以在策略点处调用一些Python代码,而无需分发或重新编译整个系统代码。(这里的控制语言我属实没理解,百度的也是数控语言,但看介绍应该是指python的胶水性质,就当做组件集成吧)
Python的简洁性使其从本质上能够成为一个灵活的控制工具。然而从技术上来讲,这也只是Python的常规角色之一,许多或许绝大部分Python代码作为独立的脚本执行时无需调用或了解其他的集成组件。然而,Python不只是一种控制语言。
使用便捷:
可能对于脚本语言最好的解释,就是一类应用于快速变成任务的一种简单语言。对于Python来说,这确实是实至名归,其敏捷的开发周期促进了探索、增量式的软件开发模型。
但是千万不要被迷惑,误以为Python仅可以实现简单的任务,恰恰相反,Python的易用性和灵活性使编程任务变得简单。(我完成这个任务不是因为它简单,而是我让它变的简单)Python有着一些简洁的特性,但是它允许持续按照需求尽可能优雅的方式扩展。通常应用于快速作业和长期战略开发
所以Python是不是脚本语言呢?这取决于看待问题的视角。从一般意义上讲,脚本语言一词可能最适用于描述一种Python所支持的快速和灵活的开发模式,而不是特定的应用领域的概念。
说一下自己的理解,是脚本语言,但绝不仅仅是脚本语言。可以是shell工具,胶水语言应用于特定领域发挥脚本语言的特性;也可以因其便捷的特点高效完成简单的任务当做脚本语言。
但Python的应用领域绝不仅仅这些,对于脚本语言这一称呼,可以是,但不是全部。
Python是什么由用户决定,是牙签是桌子全看你的发挥。
好吧,Python的缺点是什么:
(看不见,看不见,看不见)
Python重大且且普遍的唯一缺点(不是我说的,书上写的)就是:在现有的实现方式下,与C,C++这类完全编译并且较底层的语言相比,Python的执行速度还不够快。尽管这类任务在今天已经非常少见,你仍可能需要使用较底层语言来接近问题的核心,因为这些底层硬件的框架有着更加直接的对应关系。(因为底层的原因,执行速度还是不够快)
目前Python的标准实现方式是将源代码的语句编译(翻译,这个词我不太明确)为字节码的形式,之后再将字节码解释出来。由于字节码是一种与平台无关的格式,因而它具有可移植性。
Python程序通常不会将代码编译成底层的二进制代码(这是慢的原因),一些Python程序将会比像C这样的完全编译语言慢一些。
程序的类型决定了是否需要关注程序的执行速度。Python已经优化过很多次,并且Python在绝大多数应用领域的速度也足够快。此外,一旦使用Python做一些‘现实’世界的事情,程序实际上是以C的速度运行的,如处理某一个文件或者构建一个用户的图形界面。因为在这样的任务中,Python代码会立即调用Python解释器内部已经编译的C代码。(对于一些特定的任务,Python其实内置了C代码)。究其根源,Python开发速度带来的效益往往比执行利率带来的损失更为重要(这块我不太赞同,提升效率与开发速度带来的效益不应该是黑白关系,不能为了速度什么都不管,我们是要用代码改变世界的人),特别是在现代计算机的处理速度得到极大提升的情况(提升不应该是用来挥霍,不敢说做的更好,但是在不变坏的情况下做的更多)。
然而即便当今的CPU的处理速度很快,在一些原因领域仍然需要优化程序的执行速度,如数值计算和动画渲染,常常需要其核心数据处理单元至少以C的速度执行。如果你在以上领域工作,仍然可用使用Python,只需要分离一部分需要优化速度的应用,将其转化为编译好的扩展插件,并且在整个系统中使用Python脚本将这部分应用连接起来(就是胶水,找C来帮忙)
我自己总结一下作者的观点,没有缺点,如果非说有就是执行速度,但是我开发速度快啊,非要有速度我内置C,解决不了的我还是胶水可以找人帮忙。NB!
如今谁在使用Python:
(这部分我不太想写了,介绍一些Python企业)
成功案例:http://www.python.org/about/success
应用程序领域:http:www.python.org/about/apps
用户意见:http://www.python.org/about/quotes
维基百科页面:http:en.wikipedia.org/wiki/List_of_Python_software
如今贯穿所有使用Python的唯一共同思路也许就是:Python在所有领域几乎都无所不能,Python的通用性使其能够应用于任何场合,而不是只能在一处使用。
牛逼就完了嗷
使用Python可以做什么:
(啥都行,越写越墨迹)
系统编程
Python对操作系统服务的内置接口,使其能够成为编写可移植性的维护操作系统的管理工具和部件(有时也叫做shell工具)的理想工具。Python可以搜索文件和目录树,可以运行其他程序,用进程或线程进行并行处理等。
图形用户界面(GUI)
Python简洁以及快速的开发周期十分适合开发桌面GUI程序。Python内置了thinter的标准面向对象接口TK GUI API,使Python程序可以生成可移植性的本地化设计感的GUI,并且具有良好的移植性。通过适当的库,可以在Python中使用其他的GUI工具包。
(画图,做个界面都行)
Internet脚本
Python提供了标准的Internet模块,使Python程序能够广泛的在多种网络任务中发挥作用,无论在客户端还是服务器端。可以通过套接字进行通信;从发送到服务器端的CGI脚本表单中提取信息;通过FTP传输文件;解析生成XML和JSON文档;发送,接收、生成、解析Email;通过URL获取网页;从获取的网页中解析HTML文件;通过XML-RPC和Telnet等协议进行通讯;Python web开发包如Django;大量第三方Internet编程工具。
(爬虫,web开发)
组件集成
就是胶水语言,Python通过C/C++系统进行扩展以及嵌入C/C++系统的特性,使其能够作为一种灵活的粘合语言,可以脚本化处理其他系统和组件。如将一个C库集成到Python中,就可以让你利用Python来进行测试并且调用库中的其他组件;将·Python嵌入到其他产品中,则可以让你在不需要编译整个产品或分发源代码的情况下,单独对产品进行定制
(胶水)
数据库编程
Python提供了所有主流关系型数据库系统的接口,Python定义了一种通过Python脚本存取SQL数据库系统的可移植的数据库API,这个API对于各种底层应用的数据库系统都是统一的。
对于非SQL部分,Python的标准pickle模块提供了一个简单的对象持久化系统,它能够让城乡轻松的将Python对象保存到文件和类文件载体中,以及从这些载体中恢复。PyMongo作为mongodb的一个接口,使用Python自有的列表和字典的结构来存储数据,其文本可以使用Python自带的标准库json模块进行解析和创建
(连接数据库)
快速原型
对于Python程序来说,使用Python或C编写的组件看起来都是一样的,正因为如此,我们可以在一开始利用Python做系统原型,之后再将组件移植到C或者C++这样的编译语言上。与其他原型工具不同,当确定原型工具后,Python并不需要重写,系统中不要求执行效率的部分可以保持不变,从而使维护和使用变得轻松起来
(不了解,全抄了)
数值计算和科学计算编程
Python也被大量应用于素质编程,逐渐成长为Python最具有竞争力的使用案例。最著名的Numpy,其他一些数值计算工具为Python提供了动画,3D可视化,并行处理等功能的支持
(计算方面挺强的)
更多内容:游戏、图像、数据挖掘、机器人、Excel等
尽管有着和广阔的实际应用,这些特定领域当中有许多在很大程度上都是Python组件集成角色的再次例证。(啥都能干,指着谁不一定)
Python有哪些技术上的优先
(吹逼的关键到了)
面向对象(oop)和函数式
从根本上讲,Python是一种面向对象的语言。它的类型支持对台,运算符重载和多重继承等高级概念,并且以Python特有的简洁语法和类型为背景,OOP十分易于使用。
除了作为一种强大的代码组织和重用手段外,Python的OOP本质使他成为其他面向对象系统语言的理想脚本工具。
面向对象只是Python的一个选择而已,Python既支持面向对象(类为基础)也支持面向过程(语句为基础),还内置了函数式编程的支持。
免费
不要钱的就是好东西,Python的使用和分发是完全免费的,Python完全开放源代码,提升了开发者的实例,Python的开发是由社区驱动的,是Internet大范围的协同合作的努力,Python语言的改变必须遵循一套规范而有约束力的程序(称作PEP流程),并且需要经过规范的测试系统和BDFL进行彻底检查。使得Python相对于其他语言和系统可以保守的持续改进(Python2.x到Python3.x除外)
可移植
Python的标准实现是由可移植的ANSIC编写的,可以在目前是由主流平台上编译和运行。
除了语言解释器本身之外,Python发行时自带的标准库和模块在实现上也都尽可能考虑跨平台的移植性
功能强大
从语言特性上看,Python是一个混合体,它丰富的工具集使他介于传统的脚本语言和系统语言之间。Python提供了所有脚本语言的简单和易用性,并且具有那些在编译语言中才能找到的高级软件工程工具。
动态类型,Python在程序运行过程中跟踪对象的类型,不需要代码中进行复杂的类型和大小的声明。Python中没有类型或变量声明这种做法
自动内存管理。Python自动为对象分配空间,并且当对象不再使用时将自动垃圾回收,在需要时自动扩展或收缩
大型程序支持
为了能建立更大规模的系统,Python包含了模块、类和异常等工具。这些工具允许把系统组织为组件,使用面向对象重用并定制代码,并以一种优雅的方式处理事件和错误,前面提到的python函数式编程工具提供了实现相同目标的其他方法
内置对象类型。Python提供了常用的数据结构作为语言的基本组成部分,如列表,字典,字符串等。他们灵活且易于使用
内置工具,为了对以上对象类型进行处理,Python自带了许多强大的标准操作,包括拼接,切片,排序,映射等
库工具,为了完成更多特定的任务,Python预置了许多编码的工具,从正则表达式匹配到网络都支持
第三方工具,用于Python是开源的,鼓励开发者提供Python内置工具之外的预编码工具
除了这一系列的Python工具外,Python保持了相当简洁的语法和设计。综合这一切得到的就是一个具有脚本语言所有可用性的强大编程工具(站着把钱挣了)
可混合
Python程序可以以多种方式轻易的与其他编程语言编写的组件粘接在一起,这意味着可以根据需要给Python程序添加功能,或者在其他环境中使用Python
相对简单易用
同其他语言(C/JAVA/C#相比,Python编程对于大多数用户来就讲出奇简单,要运行Python程序,你只需要简单的键入Python程序并运行就可以了,不需要其他语言(如C/C++)所必须的编译和链接等中间步骤。Python可以立即执行程序,这形成了一种交互式编程体验和不同情况下快速调整的能力,往往在修改代码后几乎能立即看到程序改变后的效果
在实现相同功能时,Python程序比采用其他流行语言编写的程序更为简单、小巧、也更灵活
相对简单易学
Python语言的核心相当简单易学,但千万不要指望但时间内成为专家(忘掉市面上那些宣传广告吧)
当然,掌握任何像今天Python这样的充实主题都不是一件轻松事,在基础夯实后还有特定领域的进阶,学无止境,或许我们都被Python的简洁欺骗了,不然我也不必买书了。
Python和其他语言比较起来怎么样
这一部分我不想抄书了,反正都是长处比短处,没什么意义
如果不要求最顶尖的性能,Python天下第一!!!
课后作业:抄写并背诵本章习题
1.人们选择Python的6个主要原因是什么?
软件质量,开发者效率,程序可移植性,标准库支持,组件集成和编码乐趣,其中软件质量和开发者效率这两条是人们选择python的主要原因
2.请列举如今正在使用Python的4个著名公司和组织的名称
谷歌,工业魔光,CCP游戏,YouTube,豆瓣,知乎等。如今从事软件开发的所有组织几乎都以某种程度使用着Python,无论长期战略产品开发,抑或测试、系统管理这样的短期策略任务都有Python的身影
3.出于什么样的原因会让你在应用中不使用Python呢?
Python的主要缺点是它的性能,它不像C和C++这类常规的编译语言运行得这么快。另一方面,它对于绝大多数应用已经足够快了,并且典型的Python代码运行起来速度接近C,因为在Python解释器中调用链接C的代码。如果速度要求很苛刻的话,应用的数值处理部分可以采用编译好的扩展以满足应用要求。
4.你可以用Python做什么?
你几乎可以在计算机上的任何方面使用Python,从网站和游戏开发到机器人和航天飞机控制
5.在Python中import this 的表述有什么含义?
在Python中运行import this会触发内部的一个彩蛋,它将显示Python语言层面之下的设计哲学。被誉为Python之禅。
6.为什么‘spam’出现在网上和书上的许多Python例子中出现?
‘spam’引用自Monty Python剧团的一部著名的荒诞剧,剧中人们试图在自助餐厅点餐,却被歌颂火腿的维京人的合唱歌声淹没。对了,这也是Python脚本中的一个普通的变量名。
7.你最喜欢什么颜色?
蓝色。不,黄色!(Python图标两条蛇一蓝一黄,我喜欢黄色)