首要我要说,这是一个很好的问题。学习和使用Python很有一段时间了。大致知道Python是个什么东西,懂得使用其中不少的module,也慢慢地了解到Python的更多地比较tricky的地方。
可是被师兄一句”为什么要用Python,究竟有什么好处“,我嘀咕了半天,绕老绕去,仍然很难抽象出几个比较重要的点来问答他的问题。是的,我知道了一下关于what和how的东西,但why, why python?知之甚少。
针对这个问题,这两天在网上找一些相关的资料。仍然不是很清晰,但就我所知,可以更大家分享一下。我想,可以从两个方面来回答这个问题。
1. Why Dynamic Language?
Python一般称之为脚本语言,这种源于其早期的使用范围,文本处理和系统管理。但现在Python早已应用于网络游戏,服务器编程,web开发等其他广泛的领域,更c/c++, Java等一样,是一门通用的高级语言,只是区别于它们,称之为:Dynamic Language(动态语言)。那动态语言有什么好处呢?
维基百科的动态语言的对动态语言词条中指出,其定义是比较模糊。但也可以找到这样一个定义:”动态编程语言是一类可以在运行时刻改变自身结构的语言————功能(方法、函数)可以被加入或去除,新的类或对象可以被建 立,新的模块可以出现。“大致可以定义它。
动态语言在类型检查在运行时进行,作为解释性语言,编辑好后就立即运行。不像C++,需要很多的编译时间,一大堆的编译信息。还需要写比较复杂的Make文件,编译选项以及库之间的繁复依赖。
从论文《Dynamic Languages—ready for the next challenges, by design》我们可以看到动态语言具有以下的一些特性:
1) 技术纯粹。动态语言的创造源于需要解决某个特定领域的问题,而不是由商业公司的推动,比如C#.
2) 节省个人的时间,而不是机器的时间。专注于提供程序员的工作效率,而不是提高程序的执行速度。这使得动态语比C/C++更接近自然语言,更具表达性。
3) 深度开源。完全开源,全球大量的人参与进来,贡献自己的智慧和热情。
4) 精英领导和自然选择想结合。动态语言一般沿着两个不同的方向发展:首先是语言的内核以及核心设计原则由少量的大牛来掌控,以保证朝着正确的方向发展;其次语言的容量,在小巧,精致的内核上开各个领域的库,为应用提供便利。
5) 平台中性。动态语言一般都可以运行于各种平台之上,为跨平台提供便利。
另外,由于动态语言导致传统的很多静态语言编译器的很多优化技术无法由于其上,导致效率问题一直深受诟病。但随着技术的发展,也从各个方面大大提供了效率。文章《Dynamic Languages Strike Back 》在这个方面做了深入的研究。
总之,动态语言对于小型的项目,不需要考虑太多程序效率的情况下,可以专注于业务的处理逻辑,快速地开发出原型系统。
2. Why Choose Python?
类似于Python的比较流行的动态语言还有Perl, Ruby, TCl等。但为什么要选择Python呢?正如不少人所说:语言的选择是一种信仰。大凡涉及信仰,就很难有理性地分析,参杂太多的偏见。在这里我只想说,python优雅简洁,很流行,做事情很简单,上手很快,有丰富而友好的库,文档也很丰富和齐全,社区很庞大,而且还在不断地往前发展,非常不错。关于这个问题也可以去google上搜索一把,你可以看到计算机大牛Eric Raymond的文章:Why Python。其中先抑后扬,从具体的某个程序的角度,来展现Python的优雅、简洁和便利。另外,Python的使用者们还创造了一个词汇Pythonic,据说就是大道至简的意思,具体可以看What is Pythonic?
最后,关于我们可以在看看Python’s Philosopy: The Zen of Python
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 aren’t 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 you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
enjoy python, have fun:)