TZH , Python理论(一)
目录
- python的发展史
- python的主要应用领域
- python是什么样的语言
- python的优缺点
- python解释器
正文
一 , python的发展史
- python的创始人是 "吉多·范罗苏姆(Guido van Rossum)" , 1989年圣诞节期间, 为了在阿姆斯丹特打发时间, 开始写Python语言的编译器, Python这个名字, 来自Guido所爱的电视剧(Monty Python's Flying Circus.) 创造一种 C 和 Shell之间, 功能全面, 易学易用,可扩展的语言.
- 1991年, 第一个Python编译器诞生, 是用C语言实现的, 并能够调用C语言的库文件, 从一出生, Python已经具有了: 类 , 函数 , 异常处理, 包含表和词典在内的核心数据类型, 以及模块为基础的扩展及系统.
- Granddaddy of Python web frameworks , Zope 1 was released in 1999
- 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(兼容2.4和3.0版本)
- Python 2.7 - July 3, 2010(兼容2.4和3.0版本)
- In November 2014, it was announced that Python 2.7 would be supported until 2020 , and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible(在2014年11月,宣布Python 2.7将被支持到2020,并重申不会有2.8次发布,因为用户预计将尽快移动到Python 3.4 +。)
- Python 3.0 - December 3, 2008 (完全不兼容当时主流的2.4版本)
- 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
二 , python的主要应用领域
- 云计算: 云计算最火的语言, 典型应用 OpenStack
- WEB开发: 众多优秀的WEB框架, 众多大型网站均为 Python 开发 , Youtube , Dropbox , 豆瓣 .....典型WEB框架有Django
- 科学运算, 人工智能: 典型库 NumPy , SciPy , Matplotlib , Enthought librarys, pandas
- 系统运维 : 运维人员必备的语言
- 金融 : 量化交易, 金融分析 , 在金融工程师领域, python 不但在用 ,且用的最多 , 而且重要性逐年提高 , 原因: 作为动态语言的Python , 语言结构清晰简单, 库丰富 , 成熟稳定, 科学计算和统计分析都很好, 生产效率远远高于C , C++ , java; 尤其擅长策略回测.
- 图形GUI : PyQT , WxPython , Tkinter
三 , python是什么样的语言
编程语言主要分为 : 编译型和解释型 ; 静态语言和动态语言 ; 强类型定义语言和弱类型定义语言 .
Python是 "动态解释型的强类型定义语言"
-
编译型和解释型
- 编译型 : 负责翻译的程序来对我们的源代码整体进行转换,生成相对应的可执行代码, 就称为"编译(Compile)" , 负责编译的程序就称为"编译器(Compiler)" , 优势为 程序执行速度快, 同等条件下对系统要求较低 , 开发操作系统, 大型应用程序 , 数据库系统等 采用它, 像 C/C++ , VB等
- 解释型 : 使用专门的解释器对源程序进行逐行解释成特定平台的机器并立即执行的语言 ; 解释型语言通常不会进行整体的编译和链接处理, 解释型语言相当于把编译型语言中的编译和解释过程混合在一起同时完成 . 优势为跨平台比较容易, 只需要提供特定平台的解释器即可, 方便实现源程序的移植 . 网页脚本, 服务器脚本及辅助开发接口这样对速度要求不高, 对不同系统平台间的兼容性有一定要求的程序则通常使用解释型语言 , 如 java , javaScript , VBScript , Perl , Python等
-
动态语言和静态语言
- 动态类型语言: 在运行期间才去做数据类型检测的语言, 也就是说 , 在用动态类型语言编程时 , 永远也不用给任何变量指定数据类型 , 该语言会在你第一次赋值给变量时 , 在内部将数据类型记录下来, Python和Ruby就是一种典型的动态类型语言 ;
- 静态类型语言: 它的数据类型在编译期间检测的 , 也就是说在写程序时要声明所有变量的数据类型 , C/C++时静态类型语言的代表 , C# , JAVA也是静态类型语言.
-
强类型定义语言和弱类型定义语言
- 强类型语言: 强制数据类型定义的语言 ; 也就是, 一旦一个变量被指定了某个数据类型 , 如果不经过强制转换, 那么它永远是原来定义的数据类型 , 例如: 定义一个整型变量A , 那么程冠希根本不可能将变量A当做字符串处理, 强类型定义语言是类型安全的语言 ;
- 弱类型语言: 数据类型可以被忽略的语言, 它与强类型定义语言相反, 一个变量可以赋不同数据类型的值 .
- 区别:强类型定义语言在速度上可能逊于弱类型语言, 但是强类型定义语言严谨性能够有效的避免许多错误 .
四 , python的优缺点
-
优点
- python结构 "优雅" , "明确" , "简单" ; 所以python程序看上去 简单易懂 , 初学者学python, 很容易入门, 且以后深入进入, 可以编写非常复杂的程序;
- 开发效率非常高 , python有非常强大的第三方库, 基本上你想通过计算机实现的任何功能 , python官方库里都有相应的模块进行支持, 直接下载调用 , 在基础库的基础上再次进行开发, 很大的降低开发周期, 避免重复造轮子;
- 高级语言 , 当你使用python语言编写程序时, 无需考虑如何管理程序使用内存一类的底层细节;
- 可移植 , 基于python的开源本质, 已经移植在许多平台上(经过改动使其可以工作在不同的平台上) , 若小心的避免使用依赖于系统的特性 , 那么所有的python程序无需修改就 几乎可以在市场上所有的系统平台上运行;
- 可扩展 , 若代码中一段关键代码想使其运行更快或希望某些算法不公开, 可以使用C或C++编写, 然后在python程序中使用;
- 可嵌入 , 可以把python嵌入到C/C++程序中, 想程序用户提供脚本功能.
-
缺点
- 速度慢, python的运行速度相比 C 确实慢很多, 跟 JAVA相比也要慢一些, 其实这里说的运行速度慢大多数情况下用户是无法直接感知到的, 必须借助测试工具才能体现出来; 大多数情况下python完全可以满足对程序速度的要求, 除非写的是对速度要求极高的搜索引擎;
- 代码不加密 , 因为python是解释型语言, 它的源码都是以明文形式存放的; 可以不认为是一个缺点,
- 线程不能利用CPU问题, 这是python被诟病最多的一个缺点, GIL(Global Interpreter Lock)全局解释器锁, 是计算机程序设计语言解释器用于同步在线的工具, 使得任何时刻仅有一个线程在执行, python的线程是操作系统的原生线程, 在Linux上为pthread,在windows上为 Win thread , 完全由操作系统调度线程的执行, 一个python解释器进程内有一条主线程, 以及多条用户程序的执行线程, 即使在多核CPU平台上, 由于GIL的存在, 所以禁止多线程的并行执行;
五 , python解释器
使用python编写代码时, 得到是一个包含python代码的以 .py 扩展名的文本文件, 要运行代码, 就需要python解释器去执行 .py 文件.
由于整个python语言从规范到解释器都是开源的, 所以理论上, 只要水平够高, 任何人都可以编写 python 解释器来执行python代码(难度非常大), 事实上, 确实存在多种python解释器.
- CPython
- 从python官网下载并安装好 python 2.7后, 就直接获取到一个官方的解释器: CPython. 这个解释器使用C语言开发的, 所以叫 CPython , 在命令行下运行python就是启动CPython解释器.
- CPython 是使用最广的Python解释器 .
- IPython
- IPython是基于CPython之上的一个交互式解释器, 也就是说, IPython只是在交互方式上有所增强, 但是执行 Python代码的功能和Cpython是完全一样的, 好比很多国产浏览器虽然外观不同, 但内核其实都是调用了IE,
CPython用 ">>>" 作为提示符 ; 而 IPython用 In [序号]: 作为提示符 .
- IPython是基于CPython之上的一个交互式解释器, 也就是说, IPython只是在交互方式上有所增强, 但是执行 Python代码的功能和Cpython是完全一样的, 好比很多国产浏览器虽然外观不同, 但内核其实都是调用了IE,
- PyPy(目标是执行速度快)
- PyPy是另一个Python解释器, 它的目标是执行速度, PyPy采用JIT技术, 对python代码进行动态编译(注意不是解释), 所以可以显著提高Python代码的执行速度.
- 绝大部分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 , 而是通过网络调用来交互, 确保各程序之间的独立性.
作者:TZHR —— 世间一散人
出处:https://www.cnblogs.com/haorong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明