Python,读作[paɪθɑn],翻译成汉语是蟒蛇的意思,并且Python的logo亦是两条缠绕在一块的蟒蛇的样子,然而Python语言和蟒蛇实质上并无一毛钱关系。
Python的口号是:“人生苦短,我用Python!”。这条口号已然被Python业界广泛运用,快成为了宣传词一类的存在了。
Python语言是由于荷兰程序员Guido van Rossum,江湖人叫作“龟叔”,独立研发完成初版的。“龟叔”曾供职于google,现任职于dropbox 。1989年圣诞节时期,在阿姆斯特丹,为了打发圣诞节的无趣,决心研发一个新的脚本解释语言,做为ABC语言的一种继承,而后他就这么做了,并实现了(大神的能力)。之因此选中Python做为该编程语言的名字,是由于他是一个叫Monty Python喜剧团体的兴趣者,其本意并不是想选条蟒蛇。
Python第1个公研发行版发行于1991年,因此这年被当作Python的诞生年。
Python 源代码遵循 GPL(GNU General Public License)协议,这是一个开源的协议,亦便是说你可以避免费运用和传播它,而不消担心版权的问题。
日前Python是由于一个核心研发团队在守护,龟叔属于太上皇职位,仍然占据着至关重要的功效,指点其发展。
1、Python的发展趋势
从上图中,咱们能够看出Python在近期3年显现了井喷式的发展。下图是2017年7月的TIOBE全世界编程语言热度排行榜,从中咱们能看出Python已然挤下C#,强势插进第四,当之无愧的解释类型语言领头羊。
前面咱们说了Python诞生自1991年,掰掰指头算算都26年了,比1995年的JAVA语言都早了4年,为么大器晚成,此刻才发力?
其一,在1990那个年代,计算机性能相比此刻差非常多,程序执行速度和效率很重要,快速研发不是第1要务,压榨设备性能才是。Python做为一门解释型动态语言,在解释方式上它天生就存在运行速度较慢的问题,因此呢不被当时编程界看好,其追求研发速度、强调简洁优雅、降低编程门槛的核心理念有点超越当时主流。而时迄今日,计算机的硬件性能已然得到数量级的加强,计算能力再也不是限制编程语言的最重要的原因,敏捷研发作为生产环境下对语言选取的重要原因,Python很好的满足了这一点,从而得到快速发展。
其二,Python出生欠好。做为对比的JAVA出身名门,其东家为SUN,当时互联网的头号机构,类似此刻Google的地位,因而得到大力推广,并且有一群能力强、专职、有组织的团队进行研发和守护,因此火速得到成功,普及开来,迄今仍然霸占着编程语言的榜首位置。而Python是个人编写的,寒门出身,龟叔无三头六臂,个人时间精力都是有限的,虽然有有些志愿者帮忙做有些事情,但无疑和JAVA的正规军相比,能量还是要差了非常多,这些都引起Python在初期发展得较为缓慢,乃至到如今都还未处理其被诟病的GIL问题。
2、Python语言的特点
1. 简单易学、知道优雅、研发速度快简单易学:与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。先订个小目的爬个小山,而后再往更高的山峰前进。而不像C和JAVA光语言学习本身,针对非常多人来讲就像珠穆朗玛峰同样高不可攀。知道优雅:Python的语法非常简洁,代码量少,非常容易编写,代码的测试、重构、守护等都非常容易。一个小小的脚本,用C可能必须1000行,用JAVA可能几百行,然则用Python常常只必须几十行!研发速度快:当前互联网企业的生命线是什么?制品研发速度!倘若你的研发速度不足快,在你的制品推出之前别人家的制品已然上线了,你亦就无存活空间了,这儿的真实例子数不堪数。那样,Python的研发速度说第二没人敢叫作第1!(不欢迎辩论^_^)2. 跨平台、可移植、可扩展、交互式、解释型、面向对象的动态语言跨平台:Python支持Windows、Linux和MAC os等主流操作系统。可移植:代码一般不必须多少改动就能移植到别的平台上运用。可扩展:Python语言本身由C语言编写而成的,你完全能够在Python中嵌入C,从而加强代码的运行速度和效率。你亦能够运用C语言重写Python的任何模块,从基本上改写Python,PyPy便是这么干的。交互式:Python供给很好的人机交互界面,例如IDLE和IPython。能够从终端输入执行代码并得到结果,互动的测试和调试代码片断。解释型:Python语言在执行过程中由解释器逐行分析,逐行运行并输出结果。面向对象:Python语言具备所有的面向对象特性和功能,支持基于类的程序研发。动态语言:在运行时能够改变其结构。例如新的函数、对象、乃至代码能够被引进,已有的函数能够被删除或是其他结构上的变化。动态语言非常拥有活力。3. “内置电池”,海量的标准库和第三方库
Python为咱们供给了非常完善的基本库,覆盖了系统、网络、文件、GUI、数据库、文本处理等方方面面,这些是随同解释器被默认安装的,各平台通用,你无需安装第三方支持就能够完成大多数工作,这一特点被形象地叫作作“内置电池(batteries included)”。
在程序员界,有一句话叫做“不要重复造轮子”。什么意思呢?便是说不要做重复的研发工作,倘若对某个问题已然有开源的处理方法或说第三方库,就不要自己去研发,直接用别人的就好。不要过分迷信自己的代码能力,要晓得,能做为标准库被Python内置,必然在靠谱性和算法效率上达到了日前最高水平,能被广泛运用的第三方库,必然亦是经受了海量的应用考验。除非机构需求,不要自己去研发,请运用现成的库。哪些造轮子的事情,就交给世界最顶尖的那一波程序员去干吧,无极致的思维和数学能力,想创造好用的轮子是很难的。
4. 社区活跃,贡献者多,互帮互助
技术社区的存在就相当于程序员手中的指南针,无指南针,非常多时候,碰到了问题,就像无头的苍蝇只能到处乱飞,最后在茫茫的海洋中转晕致死。技术社区能够给咱们对语言的学习和运用供给巨大的帮忙,无论是前期的学习,还是日后的工作,只要有问题,技术社区的大牛都能够帮咱们处理,有这些助力,能够帮咱们更好地认识、学习和运用一门语言。技术社区同期还推动Python语言的发展方向,功能需求,促进机构企业更加多的运用Python语言,招聘Python程序员。
然而、然而,上面说的是国外。在国内,好似无比较成熟,影响范围广的Python技术社区,还是说我见识浅薄不晓得罢了?据自己分析,有历史原由和Python流行过程中形成的习惯等原因,国外Python能手都爱好用邮件列表、wiki等方式进行交流,而国内爱好的论坛、bbs等无形成规模,因此导致此刻的情况。
因此呢,朋友们,学好英语,去和世界范围的程序员交流吧!
5. 开源语言,发展动力巨大
Python是基于C语言编写的,并且运用GPL开源协议,你可以避免费获取它的源代码,进行学习、科研乃至改进。众人拾柴火焰高,有更加多的人参与Python的研发,促进它更好的发展,被更加多的应用,形成良性循环。Python为何会越来越火便是由于它的开放性,自由性,聚起了人气,形成为了社区,有非常多人在其中做贡献,用的人越来越多,自然就加强了市场占有率,企业、机构、厂家就不得不运用Python,供给的Python程序员岗位就越来越多,这便是开源的力量。
这儿附带跟大众说一个代码封闭的问题。Python写的源代码一般是不加密的,倘若要发布你的Python程序,实质上便是发布源代码,这一点跟C语言区别,C语言不消发布源代码,只必须把编译后的设备码(亦便是你在Windows上平常的xxx.exe文件)发布出去。要从设备码反推出C代码基本是不可能的,因此,凡是编译型的语言,都无这个问题,而解释型的语言,则必要把源码发布出去。倘若你不想让别人看到或抄袭你写的python代码怎么办?运用类似py2exe的包装工具,将python源码转换成一个类似于exe可执行文件的形式,但这个亦不是绝对保险,只是增多了反编译的门槛和难度,针对有经验的人而言,同样能够得到你的源代码。
你可能要问,我要经过写代码编软件卖出去挣钱怎么办?少年!日前的互联网时代,靠卖软件授权的商场模式越来越少了,靠网站服务和移动应用卖服务的模式越来越多了,这种模式不必须把源码给别人。再说了,此刻如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有没有数非常优秀的像Linux生态圈同样的开源项目,咱们千万不要高估自己写的代码真的有非常大的“商场价值”。在Python的世界,开源是王道,不要纠结你的代码被抄袭模仿,而是尽可能加强自己的水平和能力,这才是立身之本。
3、Python的应用方向
1. 常规软件研发
Python支持函数式编程和OOP面向对象编程,能够承担任何种类软件的研发工作,因此呢常规的软件研发、脚本编写、网络编程等都属于标配能力。
2. 科学计算
随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的研发,Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算行业最流行的商场软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛,有更加多的程序库的支持。虽然Matlab中的许多高级功能和toolbox日前还是没法替代的,不外在平常的研究研发之中仍然有非常多的工作是能够用Python代劳的。
3. 自动化运维
这几乎是Python应用的自留地,做为运维工程师首选的编程语言,Python在自动化运维方面已然深入人心,例如Saltstack和Ansible都是大名鼎鼎的自动化平台。
4. 云计算
开源云计算处理方法OpenStack便是基于Python研发的,搞云计算的朋友都懂的。
5. WEB研发
基于Python的Web研发框架不要太多,例如耳熟能详的Django,还有Tornado,Flask。其中的Python+Django架构,应用范围非常广,研发速度非常快,学习门槛亦很低,能够帮忙你快速的搭建起可用的WEB服务。
6. 网络爬虫
亦叫作网络蜘蛛,是大数据行业获取数据的核心工具。无网络爬虫自动地、不分昼夜地、高智能地在互联网上爬取免费的数据,哪些大数据关联的机构恐怕要少四分之三。能够编写网络爬虫的编程语言有不少,但Python绝对是其中的主流之一,其Scripy爬虫框架应用非常广泛。
7. 数据分析
在海量数据的基本上,结合科学计算、设备学习等技术,对数据进行清洗、去重、规格化和针对性的分析是大数据行业的基石。Python是数据分析的主流语言之一。
8. 人工智能
Python在人工智能大范畴行业内的设备学习、神经网络、深度学习等方面都是主流的编程语言,得到广泛的支持和应用。
当然,除了以上的主流和前沿行业,Python还在其他传统或特殊行业起着重要的功效。
4、Python的运用者
说了这么多先进的当下最前沿的Python技术方向,那样有那些机构在运用Python呢?
在国内最有名的便是知乎和豆瓣了,它们便是基于Python研发的Web服务。其它的例如百度、阿里、淘宝 、外链论坛:www.fok120.com、金山、腾讯、盛大、网易、马铃薯、外链、果壳等机构都在运用Python完成各样各样的任务,几乎所有的互联网企业都在招聘Python程序员。
在国外,更加是数不堪数。谷歌的Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、宣传等项目都在海量运用Python进行研发。还有Facebook、Twitter等等等等。几乎所有的Linux发行版都内置Python解释器。
下面是一张不完全的统计图:
5、Python的缺点
咱们光说了Python的优点,亦得说说它的缺点。任何编程语言都有缺点,Python亦不例外。
第1个缺点便是运行速度相对慢点,和C程序相比慢不少,这是解释型语言的通病,你的Python代码在执行时会一行一行地翻译成CPU能理解的设备码,这个翻译过程非常耗时,因此会变慢。而C程序做为编译型语言是运行前直接编译成CPU能执行的设备码,因此非常快。(但同期你能够这么理解,C语言把费时间的活在生产上线之前先花时间干了,因此运行时就快了。)
然则Python的慢,无你想象中的那样严重那样重要,由于: 程序速度再也不那样重要,不必定非要追求极致:前面其实咱们已然说到过,早些时期CPU比较昂贵,计算资源很吃紧,内存亦很贵,程序运行的速度和耗费的时间就很重要。这便是引起计算机科学致力于科研区别算法的效率的原由之一。然而,这已然再也不是最重要的原因,由于此刻芯片很便宜,况且运行速度有了质的提高。运行时间再也不是你最贵的资源。机构最贵的资源此刻是员工时间。或者换句话说,便是你。在规按时间内把事情做完比把程序变快更加重要。Python语法简洁,包括海量的标准库和第三方库,用较少的语句就能够完成其它语言上百条语句才可完成的任务,这无疑大大加强了研发的速度和效率,帮忙你在尽可能短的时间内完成工作。
这儿并不是说速度一点亦不重要,只是说速度再也不是独一重要的东西和独一思虑的东西。 此刻,制品的开发速度远比程序运行速度更重要。在一天结束时,让你的机构存活下来或死去的独一事物便是制品上市时间。机构能够存活下来的独一办法便是比你的竞争对手更快地创新。倘若在你的制品上市之前,你的竞争对手已然提前上市了,那样你想出了多少好的主意亦将再也不重要。 在全部体系中有比Python程序运行得更慢的瓶颈:倘若你在写一个网络应用程序,如web服务,特别有可能的状况是,CPU时间并不是你的程序的瓶颈。当你的web服务器处理一个请求时,可能会进行几次网络调用,例如到数据库,或像Redis这般的缓存服务器。虽然这些服务本身可能比较快速,然则对它们的网络调用却很慢。倘若一个单独的CPU周期等同于1秒,那样一个从北京到上海的网络调用将相当于1年。可见网络调用是多么的慢。这说明什么呢?说明Python不是系统中最慢的那个部分,有比它慢数量级的运行瓶颈卡在系统中间,制约着全部系统的运行速度。 但无论怎么样,Python慢是事实。倘若你真的对加强Python运行速度有需求,你能够运用C来写,而后在Python中调用它。另一,程序员大牛Donald Knuth说过过早优化是万恶之源。在研发的中初期,追求运行速度和效率是费力不讨好的,进行敏捷研发和快速迭代才是当下软件研发的王道模式,而Python正是为此而生。第二个问题便是GIL(Global Interpreter Lock)全局解释器锁,这是一种防止多线程并发执行设备码的互斥锁,功能和性能之间权衡后的产物。这是在设计Python语言的时候留下的一个历史性遗留问题,亦是限于当时技术团队实力有限。详细的技术细节先不解释,其导致的后果便是Python在进行多线程任务的时候,其实是伪多线程,性能较差,这一点始终被诟病,大众随便在某个技术论坛里都能找到对这个问题的激烈讨论。Python的这个问题事实存在,一段时间内亦是没法处理的,为何呢?这必须从底层重新设计Python,难度之大,工作量之大,对现有生态圈的影响非常巨大。那样有什么处理办法?运用非官方的PyPy解释器或协程机制。
第三个不是缺点的问题是Python2和Python3的不兼容性。在后面会有论述。
6、 Python之禅
最后,让咱们以Python的官方格言,亦便是俗叫作的Python之禅来结束对Python的介绍。在Python的IDLE或交互式解释器中,输入import this,你就会看到下面的一段话: The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases arent special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless youre Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, its a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- lets do more of those!
翻译过来的意思便是: 优美强过丑陋(Python 以编写优美的代码为目的)
明了强过晦涩(优美的代码应当是明了的,命名规范,风格类似)
简洁强过繁杂(优美的代码应当是简洁的,不要有繁杂的内部实现)
繁杂强过凌乱(倘若繁杂不可避免,那代码间亦不可有难懂的关系,要保持接口简洁)
扁平强过嵌套(优美的代码应当是扁平的,不可有太多的嵌套)
间隔强过紧凑(优美的代码有适当的间隔,不要奢望一行代码处理问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,亦不可违背这些规则(这些规则至高无上)
不要包涵所有错误,除非你确定必须这般做(精细地捕捉反常,不写except:pass风格的代码)
当存在多种可能,不要尝试去猜测而是尽可能找一种,最好是独一一种显著的处理方法(倘若不确定,就用穷举法)
虽然这并不易,由于你不是 Python 之父(这儿的 Dutch 指的是 Guido )
做亦许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
倘若你没法向人描述你的方法,那肯定不是一个好方法;反之也然(方法测评标准)
命名空间是一种绝妙的理念,咱们应当多加利用(倡导与号召)倘若你深入理解并实践了以上的精神,能够肯定的是你的代码水平会得到极重的加强!
|