Python初探
Become a better version of yourself!
诞生
-
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年开始写Python语言的编译器
-
1991年,第一个Python编译器诞生。它是用C语言实现的
-
Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
-
Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础
-
Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
-
Python 2.5 - September 19, 2006
-
Python 2.6 - October 1, 2008
-
Python 2.7 - July 3, 2010
-
In November 2014, it was announced that Python 2.7 would be supported until 2020
-
Python 3.0 - December 3, 2008
-
Python 3.1 - June 27, 2009
-
Python 3.2 - February 20, 2011
-
Python 3.3 - September 29, 2012
-
Python 3.4 - March 16, 2014
-
Python 3.5 - September 13, 2015
Python3.0与2.x区别
http://www.jb51.net/article/78048.htm
抽时间好好整理
目前Python主要应用领域:
- 云计算: 云计算最火的语言, 典型应用OpenStack
- WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系统运维: 运维人员必备语言
- 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
- 图形GUI: PyQT, WxPython,TkInter
编程语言
一、编译型vs解释型
- 编译型(快),在底层
- 解释型(慢),兼容性高、易移植
- java一次编译到处执行
- .net一次编码到处编译
动态语言vs静态语言
- 动态语言 变量不用指定数据类型。Python ruby
- 静态语言 需指定类型 c# java
强类型vs弱类型
1.强类型 严谨,不可改变数据类型
2.弱类型 相反
Python为动态解释强类型语言,Java c#为静态强类型语言
Python的优缺点
优点
- Python的简单易懂
- 开发效率非常高,Python有非常强大的第三方库
- 高级语言,无需考虑诸如如何管理你的程序使用的内存一类的底层细节
- 可移植性强
- 可扩展性强 如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
- 可嵌入性强 你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
缺点:
- 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些
- 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的
- 线程不能利用多CPU问题,GIL即全局解释器锁(Global Interpreter Lock)使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。
Python解释器
CPython
默认解释器,CPython是使用最广的Python解释器。这个解释器是用C语言开发的。
简述Python的运行过程
在硬盘上可以看到的pyc文件,而PyCodeObject则是Python编译器真正编译成的结果。当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。(比Java快,有些时候不比c慢)
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。