1-Python那些事儿
虽然排行烂大街,但不看总少了些什么
来看TIOBE和PYPL编程语言的排行,它们根据搜索引擎对于编程语言的搜索指数或其他的手段,对编程语言进行排名,在一定程度上反映了当前各语言的流行趋势。就像虽然明知道鲁大师的跑分没啥卵用,但是大家还是愿意跑个分.....
Python的起源
Python语言的创立者Guido van Rossum,大家都亲切地称他“龟叔”,是一位荷兰的计算机研究人员,同时对数学有着很深的造诣。
早期的个人计算机配置极低,比如内存只有128KB
,随便运行点什么程序内存就被占满了,所以当时程序员所有的关注点都是如何高效地管理硬件来最大化利用内存,这就意味着,编写一个不大的程序都必须耗费大量精力去设计硬件管理,以至于浪费了更多的时间。Guido希望能有一种语言既可以像C语言一样调用所有的计算机功能接口,又可以像shell一样简单地编程。所以Guido在1989年的圣诞节期间,用C语言写出了Python的解释器,由于他非常挚爱于一部叫做Monty Python's Flying Circus 的生活情景剧,因此将这门全新的语言命名为Python。因为在此之前曾经参与过ABC语言的开发经历,Guido对于Python的设计思想有了很大的提升。与此同时,计算机硬件技术飞速发展,无论是CPU主频还是内存大小都有了显著提升,此时因为硬件性能而导致程序执行效率低的问题正在逐渐减少,程序员转而更加关注程序的开发效率,即如何让编程更加简单。从这一点上讲,Python赶上了一个好时代。
早期,世界上其他Python的开发爱好者是通过maillist与Guido进行交流和建议的,不同领域的Python使用者根据自身需求对Python功能进行不同的扩展,他们会把自己改进的模块maillist给Guido,由他来决定是否加入该特性或者模块。但随着Python的影响力越来越大,以及互联网兴起带来了更加方便的信息交流途径,于是有了开源这种新的软件开发模式,即通过将程序代码公布到网络上使所有研究人员共同开发、改进。Python也转为开源开发,龟叔只负责大的框架的制定,至于实现细节则交给由全世界最优秀的一部分Python开发者组成的Python社区。Python有今天的影响力,社区功不可没,但Guido对于Python仍然具有绝对仲裁,因而Guido也被称为仁慈的独裁者
。
时至今日,Python的框架已大致确立,其特点主要是:
- 以对象为核心组织代码(Everything is object)
- 支持多种编程范式(multi-paradigm)
- 采用动态类型(dynamic typing)
- 自动进行内存回收(garbage collection)
- 并能调用C库进行拓展
你问我答了解Python
编程语言那么多,为什么是Python?
从设计的哲学上来说,由于Python创立者所经历的是数学家的训练,所以,他创立的语言具有高度统一性,语法格式、工具集都具有一致性。从这点不难说明,Python是工具,它是为了让我们更好地,更快地来达到我们的目的。而其他语言如Perl是语言学家创立的一样,受“There's More Than One Way To Do It”这种理念,Perl语言有了更大的自由,如两个人写相同功能的代码,可能完全不同。可以想象,自由奔放的后果是:Perl代码难以维护、可读性差等一系列问题。而Python呢,设计哲学受数学训练的影响, Python从语法模型等方面会规范你的代码,并且Python还强调诸如:一致性、规则性这些概念,从而促使你编写的代码,一次编写,长期使用。而这些优点带来的好处可不止一点点,一致性的代码,提高了可读性(记住:你写的代码是给人看的)。可移植,Python是由ANSI C编写的,可以在目前所有的主流平台上运行,不管是DOS还是超算,各平台到处可见Python的身影,如(不完全):
- Windows和DOS
- Linux和UNIX
- Mac OS
- OS/2、VMS
- 实时操作系统,如:ONX、VxWorks
- 超级计算机:如IBM大型机、Cary超算
- 移动电话:Windows Mobile和Symbian OS移动电话
- 游戏终端和iPod
简单易用。是的,运行Python程序时,只要简单的用Python解释器执行就可以了,省略了如C\C++等编译型语言,编译链接的步骤,这就有了很大向下调整能力,修改一处,即可得到修改后效果,这种交互式的体验,更有助于开发人员有个好心态,毕竟一个bug改来改去,却收效甚微,谁都不会有什么好心情!
Python功能足够强大:
- 丰富的数据类型
- 大量标准库的支持
Python还能通过cx_freeze、pyinstaller、py2exe或其他的的工具将Python程序和相关依赖打包为扩展名为exe的文件,从而可以在Windows平台上独立运行。
与Python相处是一种快乐,你不用去管指针是什么,不用考虑垃圾回收机制,不用苦恼变量的类型声明,没错。你只要负责把逻辑思维变成一行行代码就行了,在编写代码的过程中,陪伴你最多是bug,而Python有着比C\C++等更多的错误信息处理机制,还有什么比帮你快速处理问题更诱人的事情呢?
Python涉及领域广泛,简单易上手,不管你从事互联网开发、运维写写脚本, 或者你是从事科研领域的大牛,由于Python本身的特性,你将花费比学习别的语言更小的学习成本(无论是时间还是金钱成本),就能学会。综上所述,Python无疑是助你成功的无上编程利器。
Python解释器的发行版本
Python解释器的标准实现是用C写的CPython,读取以py
为扩展名的文件内容,按Python解释器的规则执行,实现相应的功能。Python语言主要有三大发行版本:
- CPython
CPython是Python的标准版本,无论是在Python官网上下载的,还是Mac OS和Linux上预安装的Python都是CPython,和其他发行版本相比,CPython运行速度最快,稳定性最高,也是最完整和最健全的。
- Jython
Jython(原名JPython)的目的是与Java语言集成,Jython包含Java类,这些类编译成Python的源代码,形成Java的字节码,这些字节码能够映射到Java的虚拟机(JVM)上。而我们仍然可以向往常一样,编写Python语句,Jython主要应用在web开发,建立基于Java的GUI,Jython具有集成支持功能,能够导入Python代码或者引用Java的类库,只是目前Jython目前还不够健壮,运行速度不如CPython。所以,目前只能做为Java的开发者来做Java代码前端的脚本语言的一个小工具。
- IronPython
IronPython可以说比CPython和Jython都要新,另外IronPython和Jython为一人(Jim Hugunin)所创,其设计目的是让Python程序和Windows平台的.NET框架以及对应的Linux上开源的Mono应用相结合。IronPython允许Python程序作为客户端或服务器的组件,还可以与其他.NET的语言进行通信。
- 其他的发行版本
表1.1列举Python的其他发行版本。
发行版本 | 描述 |
---|---|
PyPy | 带有JIT编译器的快速Python实现 |
stackless Python | 支持微线程的CPython分支 |
MicroPython | 在微控制器上运行的Python |
ActiveState ActivePython | 商业和社区版本包括科学计算模块 |
pythonxy | 基于Qt和Spyder的科学导向Python发行版 |
winPython | winPython是一个适用于Windows的可移植的发行版 |
Conceptive Python SDK | 针对商业、桌面和数据库应用程序 |
Enthought Canopy | 科学计算的商业分布 |
PyIMSL Studio | 数字分析的商业分布,免费用于商业用途 |
Anaconda Python | 一个完整的Python发行版,用于大数据集的数据管理、分析和可视化 |
eGenix PyRun | 一种可移植的Python运行库,包含stdlib,冻结到一个3.5MB – 13MB的可执行文件中 |
PythonAnywhere | freemium托管的Python安装,可以在浏览器中运行Python,例如教程、展示等 |
Python的应用
Python目前在各个领域都有所建树,包括:图像处理、数据库、科学计算、游戏开发、工业设计、天文信息处理、密码学、系统运维、化学、生物信息处理、商业支持,以及人工智能等等。以下列举一些国内外的公司对Python的应用。
- Google搜索引擎为Python实现
- YouTube视频分享服务大部分由Python编写
- NASA、Los Alamos、Fermilab使用Python实现科学计算任务
- 百度的云计算平台BAE采用Python
- 网易的游戏的服务器端大量设计开发采用Python
但我们小白学习Python之后可以干些什么呢?
- web开发,Python有著名的web框架Django、Flask、Tornado,可以快速的搭建你的web应用。
- 爬虫,提到爬虫可能你就会想到Python,是的,Python通过Scrapy框架、urllib、re等各种完备的模块。所以,无论是一个简单的爬虫脚本,还是搜索引擎这种重量级的爬虫项目,都能游刃有余。
- 大数据,Python有着强大的numpy、pandas库,可以轻松助力我们处理数据。
- 人工智能,现在越来越多的人工智能成果服务于我们的生活。而人工智能的首选编程语言是Python。
- 自动化运维:让系统易运维管理是一个工程,Python在服务器管理工具上非常丰富:配置管理(Saltstack)、批量执行( Fabric, saltstack)、监控(Zenoss, nagios 插件)、虚拟化管理( Python-libvirt)、进程管理 (Supervisor)、云计算(Openstack)等,大部分系统C库都有Python绑定。所以Python是运维提高自身的一个重要途径。
- 自动化测试:所谓自动化测试就是将一些之前通过人力测试的部分转换为用工具或者程序来进行测试,比如我们可以用selenium模拟人类来实现整个商品订单的业务流程,整个实现过程不需要像之前那样首先将商品加入购物车、然后生成订单、然后结算等等,有了自动化测试,一方面能够降低企业的人力成本,另一方面能够让我们的测试人员将更多的精力放在更复杂、更需要人力测试的地方,它就像我们的编程语言框架一样,让我们程序员将更多的精力放在业务需求逻辑上,而不是将精力放在怎么实现某个函数或者方法上。另外,它有很多测试相关的框架。
未来已来,Python正越来越多的方面发挥不可估量的作用,无论你想从事什么行业,精研什么领域,Python都将是你的得力助手。
也让我们正式Python的不足
就目前而言,Python在执行的速度方面,不如C\C++这类编译型语言快,现在Python的标准实现方式为先将源代码编译成字节码的形式,然后再将字节码解释出来,也由于字节码是一种与平台无关的格式,所以,字节码具有可移植性,但Python目前并没有将代码编译成底层的二进制代码,所以,Python程序不如C这样完全编译类的语言快。
但从另一方面来说,程序的类型决定是否需要关注程序的执行速度,Python经过版本的多次优化,Python其实已经在多数领域运行速度也足够快,除了极端需求的如数值计算和动画处理,需要至少以C甚至比C更快的速度来运行,那么要使用Python可就要费一番功夫了,如通过分离一些对速度要求高的应用,将其转换成编译好的扩展,Python再把整个系统串联起来,仍能胜任。
纵然,Python在执行速度方面有些短板,但Python带来的开发效率的提升比速度带来的损失更为重要,而且,Python作为一门开源、免费、跨平台的解释型高级语言,除了解释执行,还支持将源代码转换为字节码(.pyc文件)来优化执行速度和对源代码进行保密。
所以,人生苦短,我用Python。
如何学好Python?
Python虽然简单易上手,但这并不代表你就能学好Python,如果报以轻视之意学习,那么花样百出的bug也会教你做人!我在不断学习中,也发现一些好的学习工具与方法,本着开源的精神来分享给你,以后的章节中,也会随机的插入好的学习方法或心得罗列或总结学习要点,这里只做简述:
- 编写博客(
cnblogs
、CSDN
、Gitbook
等)
学习中,无论是老师还是书籍都不可能讲到Python的方方面面,众多扩展功能需要大家面向百度或Google编程。所以,有些问题的查询,知识点的记录和分享以及心得体会都可以写到博客里,这样方便自己的查询,别人写的再好用(不一定好!),也不如自己的写的博客查寻方便。
- GitHub的使用
GitHub是个巨大的知识库,我们可以在上面托管代码,寻找项目,都是不错的选择,GitHub更是协同开发的利器,所以要善于利用GitHub上的资源。
- 官方文档
解决bug,Google上各种找帖子,结果,以为人家的帖子是错的,这都是你没看官方文档的结果,在学习一段时间的Python之后,我们都有了自己的编程风格,官网就是标准,官方文档是纠正你奔放的野生代码
的标准。
- 相关网站或论坛
我们在写程序的过程中,伴随我们永远是bug,出现了问题怎么办?没错,segmentfault或者stackoverflow上或许有你需要的答案。
- 多画流程图(xmind,百度脑图,ProcessOn)
区别菜鸟和大神的区别就是从接到一个需求开始,菜鸟在紧张中,堆了无数行的代码,或许实现了,大神呢,先是要需求分析,留有扩展,遇到需求的调整,简单的调试就完事。你呢,代码拧成一股绳,需求一变,怎么办,改的难度要比重写的难度还大,所以,我们首先要遇到问题,先思考,分析需求,没有什么是比流程图之类的更能将思路捋清方式了,所以我们要养成写写画画的习惯。
- 拒绝做
野生程序员
,PEP8规范与自我规范
我不得在此提一下,这个让人沉默的几个字野生程序员
,这是多么一个伤自尊的讽刺啊!大家都知道,盖楼的有盖楼的规范,安装个灯泡都要规范,要饭的都知道打扮的惨一点、歌唱的好一点才能有个好收获!但如果我们只是学习了Python的用法,其他的如缩进,代码的命名规范、合适的注释这些都不注意,那么,写到最后就会导致自己的代码自己也看不懂,这给程序的后期维护(甚至无法维护)带来了极大的困难。这样的野生程序员
出去找工作是毁人家公司啊!所以,我们在日常的代码编写中,要注意这些问题。Python是优美的,身为一个资深的(未来资深的)Python开发者,我们要做到:要么不出手,要么,出手就是专业!
Python IDE的选择
一款好用的编辑器或者集成调试与其他功能集一身的IDE,对与我们编写与调试代码来说,都非常重要。那么我们在学习Python的过程中,一般使用哪些编辑器或IDE呢?
- Vim,Vim 是高级文本编辑器,旨在提供实际的 UNIX 编辑器'Vi'功能,支持更多更完善的特性集。
- Eclipse with PyDev,PyDev 是 Eclipse 开发 Python 的 IDE,支持 Python,Jython和 IronPython 的开发。
- Sublime Text,Sublime Text 是开发者中最流行的编辑器之一,多功能,支持多种语言,在开发者社区非常受欢迎。
- Emacs, GNU Emacs 是可扩展,自定义的文本编辑器。
- Komodo Edit,Komodo Edit 是非常干净,专业的 Python IDE。
- Wingware,Wingware兼容 Python 2 和 3两个版本,可以结合 Django, matplotlib等框架使用,集成了单元测试,测试驱动开发等功能。
- PyScripter,PyScripter 是款免费开源的 Python 集成开发环境(IDE)。
- PyCharm,PyCharm 是 JetBrains 开发的 Python IDE,具有代码调试、语法高亮、代码跳转、版本控制等功能。
- Notpad++,一句话,好使。
- Visual Studio Code,Visual studio号称宇宙第一IDE,肯定有其过人之处,那么它的小迷弟Visual Studio Code也是我们 编写Python代码的不二选择。
目前大家主要还是使用PyCharm。
欢迎斧正,that's all