没别的,就想聊一聊Python这门语言。

1,791 阅读9分钟

上大学时学习了有C,C++,Java,后来工作中一开始都用的是Java开发,后来转行Python开发。觉得Python是门学了不后悔的语言,而且入门相对比较容易。刚转行的时候因为有其他语言的基础看了一周语法和框架就进项目了。经常有读者问我转行学什么语言好,我会毫不犹豫的推荐Python,因为他真的很强大。对于Python语言有很多小伙伴一直存在一些误解,整理了一下自己的观点还有网上的一些资料,伙伴们可以参考一下哈!

今天不讨论xx是最好的语言,因为程序员都是非常real的。讨论这样一个话题是不会有结果的,借用微软Dmitry Kakurin的话说“这是一种信仰问题。因此,任何讲道理和争论都会无穷无尽,而且也毫无意义……”,存在即合理,孰好孰坏在不同的应用场景下还真不好说。编程语言没必要太认真,选择能解决自己问题的就好。当然作为一个程序员不可能只关注一门语言,如果不提升自己,那发展空间也就基本确定了。

近年来Python进入越来越多人的视野,论坛也时不时的会曝出Python超过xx语言。Pyton语言作为AI届的‘网红’,前段时间被要将Python加入高考的新闻刷屏,2017年2月Python也正式迁移到全球最大同性交友平台(GitHub)上。如果大家身处互联网,一定能够切身地感受到Python语言的流行程度。Python语言由于其简单易学、语法优美、应用领域广泛等诸多优点,俘获了大批的粉丝。

下图是我从百度指数上获得的数据
图片描述
在2014年之前Python搜索指数很低,14年之后搜索指数增加幅度很大,17年的时候甚至超过了老大哥Java。很多人认为Python是近几年才出现的语言,其实Python在1989年就出现了。

1989年圣诞,Monty Python"s Flying Circus停播。Guido打算找点其他的事情打发自己的圣诞假期,于是他就发明了python语言。-- 或许这就是大佬吧

直到1991年才正式发行,算起来比Java还要早。Python默默的修炼自己,终成大器。能被这么多Coder喜爱,自然有它独特的魅力。

python之父-Guido van Rossum

图片描述
Python跟Java非常的相似,两者都是开源、面向对象语言而且都是跨平台的。Java跨平台是依赖于JVM(Java虚拟机)而Python的跨平台是自身语言特性决定的。Python都被称为脚本语言或者胶水语言,在脚本方面确实处于领先地位,但不能忽略它如今也是一门独立的编程语言,实际上他也有非常丰富的开发框架、第三方库,无论在功能还是灵活性上并不亚于其他语言。

除了web开发中我们有Django、Flask、Sanic、Tornado等框架的帮助。Python也应用于学术研究及科学领域,因为Python有很强大的库和简洁的语法,即便是非计算机专业的人也能很快上手。在数据分析方面,Python有Matplotlib和numPy这样强大的绘图库和科学计算库,这就使得Python在该领域很难被替换。除此之外Python还被应用在机器学习、自然语言处理、大数据、云计算、爬虫、神经科学、心理学、电子制造、图像处理、AI技术等方面都有强大的类库以及框架。以致有了“已经没有任何语言能够动摇Python在今后生产生活的核心语言地位”的说法。


图片描述

聊聊Python并发

聊到Python并发,那么就不能避开GIL(Global Interpreter Lock)。其实GIL并不是Python的特性,它是为了实现Python解析器(CPython)引入的一个概念,官方给出的解释是:

In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)

说白了GIL就是一个全局锁,这会对多线程的上下文切换有很大的影响,甚至可以说Python就是个单线程的程序。有很多人质疑Python缺乏并发性也是情有可原,但是Python也有很多并发性包和框架。

全局解释器锁GIL是在Python大多数使用情况下的性能优化,也是CPython 代码在开发中的易用性优化。GIL可以让操作系统的线程或绿色线程使用起来更容易,同时不影响多进程的使用。

目前大量服务器端软件采用Python开发,我们也看到Python服务器每天每台机器有数百万次的请求,但它们都可以轻松的处理。所以不能说Python缺乏并发行支持。

而且Python开发团队在去年发布了基于Python四大路线的修复点

1、缩短Python的启动时间
2、加速Python的命名元组
3、重构CPython的内部API
4、甩掉Python中的GIL包袱

Python不能做大项目吗?

豆瓣的崛起就是Python特性的实例见证,其创始人仅用了三个月的时间用Python搭建了最初的豆瓣社区框架。豆瓣成立于2005年,那个时候Python真的很冷门,为什么不选择当时相对主流的Java或者PHP呢。因为当时如果不选择Python需要自己处理大量的工作,一个人短时间内完成一个功能齐全的网站是基本不可能的,因此Python就成了不二选择,在国内大网站中不光豆瓣、比如知乎、网易、百度、阿里、土豆、新浪等都是用Python语言开发的

Instagram的注册用户达到了30亿,月活用户超过8亿(作为对比,微信月活用户为9.38亿),每天亿万次的点击。在这么庞大的数据后面竟然完全是靠以慢著称的Python+Django。时至今日,即使已经拥有超过 30 亿的注册用户。Instagram 仍然是 Python 和 Django 的重度使用者。Instagram 的工程师 Hui Ding 说到: 『一直到用户 ID 已经超过了 32bit int 的限额(约为 20 亿),Django 本身仍然没有成为我们的瓶颈所在。』

什么是大项目? 说白了现在我们认为的大项目随着技术发展和Coder能力、眼界的提升,再回头来看可能就是一个小项目。直接的说,只要人牛逼啥都不是问题。正如erlang的作者所说的一样,维护简单与否主要在于你是否能快速定位到你要修改的代码。这同语言没有关系,只要保证清晰的结构就行。

Python:我不想这么秀

Python确实存在的不足:

大家应该也都知道编程语言中,运行速度最快的是C,Python运行速度慢众人皆知。其实这都不是事,Python运行慢,但是代码量非常少。几十行代码就能做到C几百行才能做到的东西。

究其原因,C是编译语言而Python是解释性语言,编译语言和解释语言,从本质上来说就是完全不同的:编译语言能最终直接对应到机器码。C/C++是典型的编译语言。

语言仅仅是一个因素,单独评估一个语言的快和慢,有时并不恰当。应该对一个应用程序,最好是针对一个特定的用例进行评估。比如用Java,Python同样实现一个软件进行评估。由于Python可以和C、C++很好的互相调用,对于真正需要性能的地方可以使用C、C++进行扩展,然后需要提高编码效率的地方用Python实现,这样写出的整体软件可能比Java快。而实际上Python从设计之初就把开发者的效率放在第一位。

Python程序员稀缺

Python在国内流行较晚,不可否认Python开发的数量比Java、PHP的Coder要少很多。就包括某些二三线城市的Python开发岗位屈指可数,这可能是由于行业需求和教育的联动导致的,但从目前的教育趋势表明这很有可能会被改变。据招聘网站数据显示,平均每月Python招聘人数需求12331人,在金九银十的招聘旺季需求一度高达20600人。既然选择成为一名互联网人,不管你现在是从事的是什么语言,不管你要选择学习什么语言。要相信自己的判断,程序员一辈子要用到很多语言&&技术。多花时间投资自己,是永远不会错的!

最后

图片描述
Python使用场景广泛,众多初创公司技术选型方面首选Python作为开发语言,虽然大部分公司失败了,但也催生了Python在国内大火的景象,Python开发效率极高,但是运行速度是很多程序员诟病Python的主要原因。近几年随着PyPy解释器的不断提升,Python在某些场景下的运行速度直逼C,所以未来速度可能根本不是问题。

近年Python开发工程师岗位数量激增。从业人员薪水还算不错,所以一定会有大量的初学者入场,平均薪资被拉低也是必然。从业有风险,入行需谨慎。我们要成为的不是语言专家,而是要努力成为领域的专家,语言没落了可以再换,如果没有扎实的基础,恐怕也要随着语言一起被淘汰。练武功既要练招式,也要练内功,讨论编程语言别太认真,选合适的解决自己问题的语言就好。

有道无术,术尚可求也,有术无道,止于术