python(一)简介、安装 、 python解释器介绍
一、 简介
- python提供了非常完善的基础代码库 , 覆盖了网络 、 文件 、 GUI 、 数据库 、 文本等大量的内容 , 被称之为“内置电池(batteris include)” 。
- 很多大型网站都是python开发的 , 比如国内的豆瓣和NASA(美国航空航天局)都大量的使用python 。
- python 的定位就是“优雅” 、 “明确” 、 “简单” , 所以python程序看上去简单易懂 。 但是深入学习也可以写很多非常复杂的程序 。
- python 优点:
- 简单优雅, 容易看懂 , 代码量少 。
- 适合开发网络应用 、 日常小工具 、 和系统管理员使用的脚本任务等 。
- 可以把其他语言开发的程序包装起来 , 方便使用 。
- python 缺点:
- 运行速度慢 。 因为python是解释型语言 , 代码在执行是会在cpu中一句一句的翻译后实在执行 , 翻译过程非常耗时 。而像C 、 java这类的语言是先编译 , 后再cpu中执行的非常快 。
- 代码不能加密 , 发布python应用是 , 只能发布源代码 。 而编译型的语言发布时可以直接发布编译后的代码 , 要从机器码反推出C代码几乎是不可能的 。 (大家那么忙 , 谁有闲工夫破解你的烂代码 , 啊哈哈哈)
二、 安装
- python 语言是跨平台的 , 可以运行在Windows 、 mac 、 Linux系统上 。 这得益于python的解释器 , 只要在系统中安装了python的解释器, 就可以运行python代码 。
- windows上安装python
- 根据你的系统下载对应的python特别注意要勾上add python 3.6 to PATH (这样你就可以不用手动配置环境变量了), 然后点击install now即可完成安装
- 运行python解释器
- 安装成功之后 , 打开命令提示符窗口 , 敲入python之后 ,会出现两种情况 。
- 情况一: 安装成功
- 情况二: 得到一个错误: python不是内部或外部命令 , 也不是可运行的程序或批处理文件 。 只是因为windows会根据python的环境变量去寻找python.exe 如果没找到 , 就会报错 。 这时需要重新手动配置环境变量 , 如果不会配置环境变量 , 建议重新执行安装程序 , 这次一定要记住勾选 add python 3.6 to PATH
三、 python解释器
- 由于整个python语言从规范到解释器都是开源的 , 所以理论上 , 只要水平够高 , 任何人都可以编写python解释器来执行python代码(难度很大) , 事实上 , 确实有很多python解释器 。
- CPython : 当我们从python官网下载并安装好python之后 , 我们就直接得到了一个官方版本的解释器(CPython) , 这个解释器是C语言开发的 。
- IPython : 是基于CPython之上的一个交互式解释器 , 也就是说 , IPython只是 在交互方式上有所增强 , 但是执行python代码的功能和Cpython是完全一样的 。
- PYPY : PyPy是另一个解释器 , 他的目标是执行速度 , PyPy采用JIT技术 , 对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 , 而是通过网络调用来交互 , 来确保各程序之间的独立性 。
补充:
- PyPy解释器使用的JIT技术 :https://en.wikipedia.org/wiki/Just-in-time_compilation
- PyPy和CPython的不同点 :http://pypy.readthedocs.io/en/latest/cpython_differences.html
- 扩展模块
- 垃圾收集策略相关的差异
- 内置类型的子类
- 突变一杯用作字典键的对象类
- 忽略了例外
- 原始值得对象标识is和id
- C-API的差异
- 性能差异
- 其他