转载自
https://www.jianshu.com/p/4293aa96fd60
https://www.liaoxuefeng.com/wiki/1016959663602400/1016966024263840
1. 简介
Python是一门简单易学,功能强大的编程语言。它具有高效的高层次数据结构,简单但有效的方式支持面向对象编程,语法优雅,动态类型,解释执行。使之成为多数平台上很多领域的脚本和快速应用开发的理想语言。它的设计理念强调代码的可读性, 跟C ++或Java等语言比可以用更少的代码实现同样的概念。Python能清晰地实现小型和大型程序。
Python解释器及其丰富的标准库的源码或者二进制版本可以从http://www.python.org/免费获取和转发。 还包含很多免费的第三方Python模块、程序、工具的发布链接及附加文档。
Python的解释器很容易用C或C++(或其他c可以调用的语言)扩展新功能和数据类型。 Python也适用于作为定制应用的扩展语言。
Python支持多种编程范式,包括面向对象的,命令式和函数式或过程式编程风格。它具有动态类型系统和自动内存管理和拥有庞大而全面的标准库。
Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。
Python的官方解释器是CPython,该解释器用C语言编写,是一个由社区驱动的自由软件,目前由Python软件基金会管理。
2. Python的设计哲学与定位
Python的设计哲学是“优雅”、“明确”、“简单”。因此其对手Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通 常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python 开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性, 并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人 认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技 术,或者用使用C/C++语言改写这部分程序。目前可用的JIT技术是PyPy。
实际上python很多标准模块,比如numpy、socket等是c实现的,效率通常比一般开发用c语言的实现要高。另外python中的ctypes和 cpython可以达到c语言类似的效率。pypy在科学计算等相关方面效率可以接近C语言,但是在其他方面效率最多和java差不多,远不及C。
3. Python地位
TIOBE编程排名: http://www.tiobe.com/tiobe_index?page=index
编程语言流行指数:http://pypl.github.io/PYPL.html:
无论那个排名,python都是脚本语言的老大。整体综合python位于第1-5名之间。
4. Python适用范围
在人工智能、大数据、区块链等方面,python是炙手可热的核心语言之一。
大陆开源软件排名第一的翻墙goagent就是纯python书写的。
豆瓣网、知乎、果壳、海淘通、Reddit等公司python占了大头。
YouTube、Google、Facebook、Yahoo!、NASA等公司python是核心语言。
阿里巴巴、腾讯、百度、豆瓣等有较大规模的python应用。
- 人工智能
在深度学习等领域,TensorFlow、Pytorch 等库占据了统治地位。更多库参考。
- Web开发
Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。使用Python语言编写的 Gunicorn作为Web服务器,也能够运行Python语言编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于 Python的Web程序之间的沟通。一些Web框架,如Django、Pyramid、TurboGears、web2py、Zope、Flask、tornoda等,可以让程序员轻松地开发和管理复杂的Web程序。
Python 对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络蠕虫。第三方库Twisted支持异步在线编写程序和多数标准的网络协议(包含客户端 和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。另有gevent这个流行的第三方库,同样能够支持高性能高并发的网络开发。
爬虫相关的库有lxml、re、urllib2、BeautifulSoup、scrapy等。
根据IEEE统计、Python是仅次于Java的第2大web开发语言。
- GUI开发:
Python本身包含的Tkinter库能够支持简单的GUI开发。但是越来越多的Python程序员选择wxPython或者PyQt来开发跨平台的桌面软件。使用它们开发的桌面软件运行速度快,与用户的桌面环境相契合。通过PyInstaller还能将程序发布为独立的安装程序包。与C++相比较,使用Python开发桌面软件通常更快更容易。
- 操作系统:
在很多作业系统里,Python是标准的系统组件。大多数Linux发布版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在终端机下直接运行Python。有一些Linux发布版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器、Red Hat Linux和Fedora的Anaconda安装器。Gentoo Linux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用作业系统功能的库。通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它Windows API。使用IronPython,Python程序能够直接调用.Net Framework。一般说来,Python编写的系统管理脚本在可读性、性能、源代码重用度、扩展性几方面都优于普通的shell脚本。在树莓派等相关硬件的系统中,python是核心语言。
- 自动化测试
多数工具集成python作为开发语言。比如自动化测试工具Appium、Selenium等。性能测试工具Grinder。
UI测试有uiautomator、sikuli、PyAutoGUI、pywinauto、ldtp、dogtail等。
Python的性能测试库multi-mechanize和locustio、funkload等模块具备强大的编程能力,通常扩展性和执行效率远强于Loadrunner和Jmeter。
Python在自动化测试交付很有知名度。比如Scons、buildbot(在谷歌chrome os使用)等。Jenkins有大量的python插件,比如facebook开发的https://github.com/facebook/buck。
自动化测试框架pytest、Lettuce、Robot Framework、behave等有一定名气。
接口测试Python大量的库支持大量协议,比如HTTP,就可以requests基于pytest很快定制简单的接口测试框架。
抓包与流量控制有scapy、ATC、mitmproxy等。
命令行自动化有 pexpect、paramiko、subprocess、Fabric等。
安全测试:Flawfinder(http://www.dwheeler.com/flawfinder/)、knock(https://github.com/guelfoweb/knock)等
死链接检查:LinkChecker等
bug管理:Trac、roundup等
python的测试工具之多,以致有一个专门的网页收集:https://wiki.python.org/moin/PythonTestingToolsTaxonomy
- 跨语言协作:胶水语言:
python是各种语言交互的最佳语言。python本身有c,java,c#的实现,可以直接调用对应语言的相关功能。对于主流的语言,python都可以良好的交互。
- 科学计算:
NumPy、SciPy、Matplotlib可以让Python程序员编写科学计算程序。Python一开始就在科学计算方面很出名,现在也是大数据处理的核心语言,多数云平台选择python作为核心语言。
- 游戏
很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。很多游戏,如EVE Online使用Python来处理游戏中繁多的逻辑。
5. Python历史
Python的创始人为吉多·范罗苏姆(Guido van Rossum)。
1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python作为程序的名字,是因为他是一个蒙提·派森的飞行马戏团( Monty Python’s Flying Circus)的爱好者。ABC是由吉多参加设计的一种教学语言。就吉多本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但认为是非开放造成的。吉多决心在Python中避免这一错误,并取得了非常好的效果,完美结合了C和其他一些语言。
就这样,Python在吉多手中诞生了。实际上,第一个实现是在Mac机上。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
目前吉多仍然是Python的主要开发者,决定整个Python语言的发展方向。Python社区经常称呼他是仁慈的独裁者。
Python 2.0于2000年10月16日发布,增加了实现完整的垃圾回收,并且支持Unicode。同时,整个开发过程更加透明,社区对开发进度的影响逐渐扩大。 Python 3.0于2008年12月3日发布,此版不完全兼容之前的Python源代码。不过,很多新特性后来也被移植到旧的Python 2.6/2.7版本。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。 Python支持重载运算符,因此Python也支持泛型设计。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。 有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者 较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shell script、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语 言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水 语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004年,Python已在Google内部使用,Google召募许多Python高手,但在这之前就已决 定使用Python。他们的目的是尽量使用Python,在不得已时改用C++;在操控硬件的场合使用C++,在快速开发时候使用Python。”
6. 如何选择python第三方模块
1,http://stackoverflow.com/ 是选择模块的首选。在里面搜索python相关内容,一般会有python模块的比较。
2,pypi( https://pypi.python.org/pypi )是选择python模块最重要的依据。
pypi上面汇集了python的多数模块。比如 https://pypi.python.org/pypi/pexpect 是pexpect模块的介绍。
3,linux的包管理提供了丰富的高质量的python模块,可以尝试使用。
比如在centos中使用 “yum search all pexpect”
4,https://www.anaconda.com/ 是占市场份额很大的首选python科学计算平台。自带了大量优质的外部库。
7. 通用IDE|文本编辑器
很多并非集成开发环境软件的文本编辑器,也对Python有不同程度的支持,并且加上专门为Python设计的编辑器插件也会有很高的可用性。
eclipse + pydev插件
emacs + 插件
NetBeans + 插件
SlickEdit
Geany 推荐
TextMate
Vim + 插件
Sublime Text + 插件 推荐
EditPlus
UltraEdit
PSPad
Editra 由Python开发的程序编辑器。
Notepad++ 推荐
vscode 强烈推荐
8. 专门为Python设计的IDE软件
适用于Python的集成开发环境(IDE)软件,除了标准二进制发布包所附的IDLE之外,还有许多其他选择。其中有些软件设计有语法着色、语法检查、 运行调试、自动补全、智能感知等便利功能。由于Python的跨平台出身,这些软件往往也具备各种操作系统的版本或一定的移植性。
spyder 大数据分析、科学计算等开发测试的首选。 –强烈强烈推荐
Eric:基于PyQt的自由软件,功能强大。支持自动补全、智能感知、自动语法检查、工程管理、svn/cvs集成、自动单元测试等功 能。调试功能与Visual Studio和Eclipse类似。目前同时有两个版本。Eric4支持Python2.x,Eric5支持Python3.x。使用前需要先安装相应的 PyQt版本。
IDLE:Python“标准”IDE。一般随Python而安装,支持较少的编辑功能。调试功能也比较弱。
Komodo和Komodo Edit:后者是前者的免费精简版。也可以用于PHP,Ruby,Javascript,Perl,Web和云开发。
PyCharm:由JetBrains打造,该公司的Java IDE软件IntelliJ拥有海量的用户;PyCharm具备一般IDE的功能,比如,调试、语法高亮、Project管理、代码跳转、智能提示、自动 完成、单元测试、版本控制等等,同时另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持Google App Engine,更酷的是,PyCharm支持IronPython。PyCharm是商业软件。 强烈推荐 功能强大,比较占用资源,经常有环境变量的坑。
PythonWin:包含在pywin32内的编辑器,仅适用于Windows。
SPE(Stani’s Python Editor):功能较多的免费软件,依赖wxPython。
Ulipad:功能较全的免费软件,依赖wxPython。
WingIDE:可能是功能最全的IDE,但不是免费软件。**强烈强烈推荐 wingide6专业版破解
PyScripter:功能较全的开源IDE,使用Delphi开发。
更多参考资料:https://wiki.python.org/moin/IntegratedDevelopmentEnvironments
9. 开胃菜
如果你做很多电脑上工作,最终你发现,有些任务你想实现自动化。例如你在大量的文本文件上执行搜索和替换,或通过复杂的方式重命名和重整一批照片文件。也许你想编写小型的自定义数据库,或者专门的图形用户界面应用程序,或简单的游戏。
如果你是个专业的软件开发,你可能处理几个C/C++/Java库,编写/编译/测试/重编译周期太慢。也许你正在为库编写测试套件,发现书写测试代码是个体力活。或者应用程序需要一门扩展语言,但是不想设计和实施新的语言。
Python就是你需要的语言。
你可以为这些任务写Unix shell脚本或Windows批处理文件,但shell脚本更适合移动文件和更改文本数据,不擅长图形用户界面的应用程序或游戏。你可以写一个 C/C++/Java程序,但需要消耗大量开发时间。 Python易于使用,可用于Windows,Mac OS X和Unix操作系统,并帮助你更快速地完成工作。
Python虽然使用简单,但是真正的编程语言。跟shell脚本或批处理文件比,它提 供更多的结构并支持大型程序。Python比C提供了更多的错误检查。它是更高级别的语言,内置了的高级数据类型,如灵活的数组和字典。基于这些通用数据 类型, Python相对Awk甚至是Perl可以处理很多领域的难题,很多东东在python中会比其他语言处理起来更容易。
Python允许你分割程序为模块,以便在其他Python程序重复使用。它包含了丰富的标准模块,你可以调用或学习。一些模块提供如文件I/O,系统调用,socket,甚至像Tk图形用户界面接口。
Python是解释语言,程序开发时不需要编译和链接而节省可观的时间。解释器可交互使用,方便试验的语言特性,写信手而用的程序,还可在自下而上的程序开发时测试功能,同时是方便的桌面计算器。
Python编写的应用程序紧凑,可读性好。 Python程序通常同样的C ,C++或Java程序要短得多,原因如下:
高级数据类型允许你在单条语句中表示复杂的操作;
语句的组织依赖于缩进而不是开始和结束的括号;
变量或参数声明不是必须的。
Python是可扩展的:懂C的话很容易添加新的内置函数或模块到解释器,可以最快速度执行关键操作或链接Python程序到二进制库(如供应商特定的图形库)。等你熟悉之后,可以链接Python解释器到C应用程序,并用它作为扩展或命令语言。
Python的名字来源于英国广播公司(BBC)节目”Monty Python’s Flying Circus”,与爬行动物无关。
10. 安装Python
因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。
要开始学习Python编程,首先就得把Python安装到你的电脑里。安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境。
1. 安装Python 3.8
目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的。由于3.x版越来越普及,因此。此处我选择安装 Python3.7。
2. 在Linux上安装Python3.8
不要动现有的python2环境!
1. 安装依赖环境
1 | yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel |
2. 下载Python3.8
https://www.python.org/downloads/
1 | wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz |
3.安装python3
个人习惯安装在/usr/local/python3(具体安装位置看个人喜好)
创建目录:
1 | mkdir -p /usr/local/python3 |
解压下载好的Python-3.8.3.tgz包(具体包名因你下载的Python具体版本不不同⽽而不不同,如:我下载的是Python3.8.3.那我这里就是Python-3.8.3.tgz)
1 | # tar -zxvf Python-3.8.3.tgz |
4.进入解压后的目录,编译安装。
1 | cd Python-3.8.3 |
5.建立python3的软链
1 | ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3 |
6. 将/usr/local/python3/bin加入PATH
1 | vim ~/.bash_profile |
source 使配置生效。
1 | source ~/.bash_profile |
*7. 检查Python3 及 pip3是否可用 *
8. 安装pip以及setuptools
毕竟丰富的第三方库是python的优势所在,为了更加方便的安装第三方库,使用pip命令,我们需要进行相应的安装。
安装 pip 前先安装 setuptools
1 | wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26 |
1 | wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb |
9. 验证
3. 在Windows上安装Python
首先,根据个人的Windows版本(64位还是32位)从Python的官方网站下载Python 3.8对应的64位安装程序或32位安装程序,然后,运行下载的exe安装包:
特别要注意勾上Add Python 3.8 to PATH
,然后点“Install Now”即可完成安装。(如果有pip也要勾选)
验证
4. 在Mac上安装Python
如果Mac系统是OS X>=10.9,那么系统自带的Python版本是2.7。要安装最新的Python 3.8,有两个方法:
方法一:从Python官网下载Python 3.8的安装程序,下载后双击运行并安装;
方法二:如果安装了Homebrew,直接通过命令brew install python3
安装即可。
11. 解释器
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py
为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py
文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
常见Python解释器
CPython
当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>
作为提示符,而IPython用In [序号]:
作为提示符。
Windows下安装步骤(前提已安装过 Python3 和 pip)
1、cmd–>打开Windows命令行,–》确保电脑已经成功安装了python,输入命令python查看当前python是否已经成功安装,然后exit()退出;
2、输入命令:pip install ipython[all] 安装ipython,也可以是用pip3命令安装,此方式进行下载安装ipython,然后会自动连接ipython的网站进行下载安装,等待即可;
3、如果提示pip的版本不是最新的,此时输入命令 python -m pip install –upgrade pip 更新我们的pip就可以了;
4、安装成功以后,输入命令 ipython 就可以开始用了。
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,而是通过网络调用来交互,确保各程序之间的独立性。
Python的解释器在linux上通常安装在
1 | whereis python3 |
执行Python脚本
Linux系统中,Python脚本可直接执行,就像shell脚本,在文件首行添加如下:
1 | #! /usr/bin/env python3 |
并添加可执行权限:
1 | chmod +x xxx.py |
12. pip 和 pip3的区别
pip和pip3是一样的,只是为了区别python2和python3之间的调用,避免冲突而进行的设定。如果你的电脑只安装了python3,那么你使用pip和pip3效果都是一样的,如果你的电脑只安装了python,那么你无法使用pip3。
同时安装了python和python3,使用pip命令,新安装的库会在python2.x/site-packages目录下。使用pip3命令,新安装的库会在python3.x/site-packages的目录下