看来关心这个问题的人比较多, 这里就重点细说一下:
首先在讲解python的优势之前, 大家需要先将这里的语言进行一个分类, 这里我们按照动态语言和静态语言来分类:
动态语言:
python, javascript, php, ruby等
静态语言:
java, c, c++, go等
注: 动态语言也经常被大家称为脚本语言, 由于经常被称为脚本语言, 所以大多数时候大家都认为一些简单的任务就用python来说, 大型的项目python就做不了或者做不好,实际上这是一个很大的误区。 为了纠正大家对这个问题的看法, 后面我们都以动态语言来描述python。
1. 动态语言的优势
大家要清楚: python是面向对象的动态语言。
为了清楚python的优势, 大家首先需要理解的是动态语言的优势, 然后要明白python在众多动态语言中的优势。
1. 在静态语言中的一些高级概念,如java中的反射以及基于反射实现的AOP, 这些概念对java初学者以及只有一两年工作经验的人来说,这几个概念是很难理解的,更不用说如何去自己实现。如果大家使用过AOP的话就会明白这几个概念从理解到熟练使用是比较难的, 而且开发效率会比较低,尽管同学可能会说“其实使用起来还是很简单啊”, 那可能是因为你没有用过动态语言中的装饰器。
2. 动态语言中对于java中的AOP这种概念直接使用装饰器就可以完成而且是python语言本身的一部分。并不像java中还需要引入第三方来完成。
3. python能轻松完成这些正是由于python是一门动态语言, 动态语言的特性使得大家去自己控制整个类的初始化以及动态去改变对象变的异常简单, 这些特性使得动态语言的灵活性远远超过静态语言。
3. 大家在学习和通过python开发系统的时候首先要充分利用动态语言的特性去完成自己的功能, 有时候在静态语言中需要很多技巧和添加多个临时变量才能完成的功能, 使用动态语言的特性只需要一两行代码就完成了。
关于动态语言的学习大家可以自己去学习一下, 但是大家一定要明白: 动态语言和静态语言编码有很大的不同, 要适应动态语言特性去开发, 不要拿着旧有的静态语言编码思维去用python,要不然大家就会觉得python好像也没有什么特别之处,只能处理一些简单的事情。 这种观念是不对的。等到你充分体验到动态语言的特性,你就会发现:以前很多一定要用设计模式来实现的功能,在动态语言中竟然不需要也能轻松实现。
2. 方便而且性能高基本用法
上面我只是简答的说了一下动态语言,大家就可以感受到python作为一个动态语言比java等静态语言的优势。但是实际上并不止这些, python内置的一些函数和用法更加使得python比java等静态语言编码更加快速和高效。
大家如果学习过python基础就会知道数组、字典、字符串等这些基本概念的操作是远远比java方便的多, 而且大家要知道这里面的很多用法的实现底层是用c来实现的, 所有这些基本用法的性能都是很高的。大家不要小看这些基本用法,这些用法才是我们平时编码过程中写的最多的, 这些用法的简化会大大提高我们的开发效率。
3. 代码优美和易读性
python代码是通过强制缩进来完成的, 如果大家是java转过来学习的最开始会不适应, 但是很快就会适应, 因为缩进使得代码很规范,而且代码可读性会很强, 而且python的各种代码规范如pep8规范会让我们的代码很规范。
4. 已有的强大的生态
python的生态有多丰富, 大家了解一下就知道了:
不管是已有的python库还是其他语言开发的框架首先支持的语言都包括python。
当然这里的生态还不只是已有的框架和库还包括诸如stackoverflow上的问题回答等
一般开发过程中大家会经常遇到两种问题: 1. 需要一个已有的解决方案来加速自己的开发。 2. 遇到问题需要快速找到解答
python经过多年的发展,不管是已有框架和库还是问题和答案在网上都有非常多的资料了。
这里说到了生态就需要说到go了。 go语言是一门比较新的语言,随着近几年docker的快速流行, go语言也越来越受到关注。 go语言从诞生之初就是奔着高并发去的, 所以作为高并发的系统开发go语言会比java,python,php更好, 但是由于go语言太新了, 所有不管是框架还是问题答案都远比Python少很多, 所有大家如果开发中遇到问题很容易卡住, 而且go语言还处于一个快速发展期,语言本身特性变化也会比较快而且不稳定, 所以不建议初学者来学习。
5. 全栈开发语言
我这里要说的全栈开发语言是广义上的。
目前可以前端和后端都能完成的语言最流行的应该就是javascript了, 其他语言几乎都只能完成服务端开发。
但是大家要明白:实际上并没有一门语言是完全的全栈开发,即使是使用javascript的人在平时开发中也只能侧重于后端开发或者前端开发。
所以这里首先要让大家对全栈的理解有一个观点:
全栈不是说能同时开发移动端,pc端就叫全栈。
真正的全栈应该是有能力去快速学习和使用现有的解决方案而不是去学习所有语言。因为技术和框架太多。没有人能学习到所有的语言和框架, 但是如果一个人能很好的解决遇到的各种问题才是真正的全栈, 比如系统数据库有瓶颈了, 能快速的去找到问题和找到解决方案, 比如系统需要适应移动端, 你能快速的去学习某一门解决方案去加速开发, 比如系统并发遇到问题了,你能快速的去学习和解决并发问题。这样的人才是全栈
那为什么我这里要说python是一门全栈语言呢? 前面我们提到的快速学习能力都是要基于大家有时间去学习, 所以如果一门语言或者工具能让你快的完成已有系统的开发, 让你空出更多的时间去学习解决方案, 那这么语言就可以让你把他成为全栈语言, 大家试想一下,对于一个会python的人来说,如果能找到对应的python的解决方案对你来说肯定比找到的java解决方案更加容易让你接受,python的生态可以让我们几乎能找到所有python已经实现的解决方案。
大家如果学习java就会知道, java的概念和要学习的知识点非常多, 不管是开发效率上还是学习时间上都会远比python多很多, 所以很多人用java的人一直都致力于如何去把java本身弄清楚而没有时间去学习其他解决方案(这里当然对大牛除外)。
6. 开发领域多, 开发效率高
python能使用的开发领域, 相信我不说大家也非常清楚了:
运维
爬虫
web系统
大数据
人工智能
云计算(openstack)
桌面应用
大家能想到的领域基于python都可以完成。当然即使这样大家也需要去学习各个领域的框架, 但是有了python基础去学习这些框架会让高效的多。
这一点就比php有很大的优势了, php在web系统开发中有很大的优势,因为php最初就是致力于web系统开发, 使得php在web系统开发中具有了很大的生态优势。 但是python的web开发领域也很强大, 已有的很多框架入django, flask, tornado等等,不管大家是需要一个灵活的框架还是需要一个全栈的web开发框架还是需要一个性能高的web框架都可以满足大家的要求。
当然python的开发效率是非常高的, python中面向对象的概念是比php的面向对象概念强的, 而且大家也会发现es6的语言也和python有很大的相似之处, 所有大家学会了python去理解javascript的话也会有很大好处。
最后说明一下
1. 一个高级的程序员需要学习的知识远不止语言本身, 还包括很多基础知识,这些基础知识加上语言和框架本身才会让我们走的更远更久, 但是学习这些知识是需要时间的,所以如何有更多的时间去学习也就成为我们领先别人的优势了。
2. 上面只是列出了python的几个大的优势, 实际上还有很多细节用一篇文章或者一个问题是无法描述清楚的。大家在熟悉python开发后自然就会明白
3. 开发效率!开发效率!, python的开发效率比java高很多,同样的功能代码量应该是java的1/3左右, 这个开发效率可以让大家有更多的时间陪家人和学习, 知乎上有人说过:如果你要让一个pythoner加班, 你需要和他谈情怀, 谈加班工资, 谈股票期权才行。 如果你需要一个javaer加班你只需要告诉他编码规范就行了。
4. 我周围已经有好些朋友或者同事是c++或者java转python开发的, 然后打算一直就用python了。
5. 人工智能时代的火热, 相信会让python越来越流行
以上只是回答了python的优点并没有否定其他语言, 请不要引起圣战!