Python是一门高级的、面向对象的、解释性、脚本语言。javascript
高级语言:贴近开发者,对应底层语言,底层语言贴近机器;java、C#、php 、rubyphp
面向对象对应于面向过程,是开发人员在开发过程中的思路,是程序员的世界观java
解释性对应于编译性语言。python
解释性语言:编译型语言在程序执行以前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。linux
编译性语言:
编译型语言在程序执行以前,有一个单独的编译过程,将程序翻译成机器语言,之后执行这个程序的时候,就不用再进行翻译了。c++
脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等能够编译成二进制代码,以可执行文件的形式存在.
脚本语言不须要编译,能够直接用,由解释器来负责解释。 脚本语言通常都是以文本形式存在,相似于一种命令.程序员
起源web
Python的做者,Guido von Rossum(吉多·范罗苏姆),荷兰人。1982年,Guido从阿姆斯特丹大学得到了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,尽管拥有数学和计算机双料资质,他总趋向于作计算机相关的工做,并热衷于作任何和编程相关的活儿。在那个时候,Guido接触并使用过诸如Pascal [ˈpæskəl]、C、Fortran[ˈfɔ:træn] 等语言。这些语言的基本设计原则是让机器能更快运行。在80年代,虽然IBM和苹果已经掀起了我的电脑浪潮,但这些我的电脑的配置很低。好比早期的Macintosh(麦金塔电脑),只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存。全部的编译器的核心是作优化,以便让程序可以运行。为了增进效率,语言也迫使程序员像计算机同样思考,以便能写出更符合机器口味的程序。在那个时代,程序员巴不得用手榨取计算机每一寸的能力。有人甚至认为C语言的指针是在浪费内存。至于动态类型,内存自动管理,面向对象…… 别想了,那会让你的电脑陷入瘫痪。正则表达式
这种编程方式让Guido感到苦恼。Guido知道如何用C语言写出一个功能,但整个编写过程须要耗费大量的时间,即便他已经准确的知道了如何实现。他的另外一个选择是shell。Bourne Shell(是一个交换式的命令解释器和命令编程语言)做为UNIX系统的解释器已经长期存在。UNIX的管理员们经常用shell去写一些简单的脚本,以进行一些系统维护的工做,好比按期备份、文件系统管理等等。shell能够像胶水同样,将UNIX下的许多功能链接在一块儿。许多C语言下上百行的程序,在shell下只用几行就能够完成。然而,shell的本质是调用命令。它并非一个真正的语言。好比说,shell没有数值型的数据类型,加法运算都很复杂。总之,shell不能全面的调动计算机的功能。算法
HOW TO用于定义一个函数。一个Python程序员应该很容易理解这段程序。ABC语言使用冒号和缩进来表示程序块。行尾没有分号。for和if结构中也没有括号() 。赋值采用的是PUT,而不是更常见的等号。这些改动让ABC程序读起来像一段文字。 尽管已经具有了良好的可读性和易用性,ABC语言最终没有流行起来。在当时,ABC语言编译器须要比较高配置的电脑才能运行。而这些电脑的使用者一般精通计算机,他们更多考虑程序的效率,而非它的学习难度。除了硬件上的困难外,ABC语言的设计也存在一些致命的问题: 可拓展性差。ABC语言不是模块化语言。若是想在ABC语言中增长功能,好比对图形化的支持,就必须改动不少地方。 不能直接进行IO。ABC语言不能直接操做文件系统。尽管你能够经过诸如文本流的方式导入数据,但ABC没法直接读写文件。输入输出的困难对于计算机语言来讲是致命的。你能想像一个打不开车门的跑车么? 过分革新。ABC用天然语言的方式来表达程序的意义,好比上面程序中的HOW TO 。然而对于程序员来讲,他们更习惯 用function或者define来定义一个函数。一样,程序员更习惯用等号来分配变量。尽管ABC语言很特别,但学习难度 也很大。 传播困难。ABC编译器很大,必须被保存在磁带上。当时Guido在访问的时候,就必须有一个大磁带来给别人安装ABC编译器。 这样,ABC语言就很难快速传播。 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python's Flying Circus(飞行马戏团)。他但愿这个新的叫作Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。Guido做为一个语言设计爱好者,已经有过设计语言的尝试。这一次,也不过是一次纯粹的hacking(搬运)行为。
一门语言的诞生
1991年,第一个Python编译器诞生。它是用C语言实现的,并可以调用C语言的库文件。从一出生,Python已经具备了 :类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。 Python语法不少来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,好比强制缩进。 但这些语法规定让Python容易读。另外一方面,Python聪明的选择服从一些惯例,特别是C语言的惯例,好比回归等号赋值。Guido认为,若是“常识”上确立的东西,没有必要过分纠结。 Python从一开始就特别在乎可拓展性。Python能够在多个层次上拓展。从高层上,你能够直接引入. py文件。在底层,你能够引用C语言的库。Python程序员能够快速的使用Python写. py文件做为拓展模块。但当性能是考虑的重要因素时,Python程序员能够深刻底层,写C程序,编译为.so文件引入到Python中使用。Python就好像是使用钢构建房同样,先规定好大的框架。而程序员能够在此框架下至关自由的拓展或更改。 最初的Python彻底由Guido本人开发。Python获得Guido同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。Guido和一些同事构成Python的核心团队。他们将本身大部分的业余时间用于hack(熟练地编辑) Python。随后,Python拓 展到研究所以外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员能够花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始流行。
人生苦短,我用python
时势造英雄,咱们不得不暂停咱们的Python时间,转而看一看瞬息万变的计算机行业。1990年代初,我的计算机开始进入普通家庭。
启示录
Python崇尚优美、清晰、简单,是一个优秀并普遍使用的语言。Python在TIOBE排行榜中排行第四,它是Google的第三大开发语言,Dropbox的基础语言,豆瓣的服务器语言。Python的发展史能够做为一个表明,带给我许多启示。 在Python的开发过程当中,社区起到了重要的做用。Guido自认为本身不是全能型的程序员,因此他只负责制订框架。若是问题太复杂,他会选择绕过去,也就是cut the corner(走捷径)。这些问题最终由社区中的其余人解决。社区中的人才是异常丰富的,就连建立网站,筹集基金这样与开发稍远的事情,也有人乐意于处理。现在的项目开发愈来愈复杂,愈来愈庞大,合做以及开放的心态成为项目最终成功的关键。 Python从其余语言中学到了不少,不管是已经进入历史的ABC,仍是依然在使用的C和Perl,以及许多没有列出的其余 语言。能够说,Python的成功表明了它全部借鉴的语言的成功。一样,Ruby借鉴了Python,它的成功也表明了Python某些方面的成功。每一个语言都是混合体,都有它优秀的地方,但也有各类各样的缺陷。同时,一个语言“好与很差”的评 判,每每受制于平台、硬件、时代等等外部缘由。程序员经历过许多语言之争。其实,以开放的心态来接受各个语言,说不定哪一天,程序员也能够如Guido那样,混合出本身的语言。
关键点常识
Python/ˈpaɪθən/ 的发音与拼写
Python的意思是蟒蛇,源于做者喜欢的一部电视剧
Python的做者是Guido van Rossum(吉多·范罗苏姆)
Python是龟叔在1989年圣诞节期间,为了打发无聊的圣诞节而用C编写的一个编程语言
Python正式诞生于1991年
Python的解释器现在有多个语言实现,咱们经常使用的是CPython(官方版本的C语言实现),其余还有Jython(能够运行在Java平台)、IronPython(能够运行在.NET和Mono平台)、PyPy(Python实现的,支持JIT即时编译)
Python目前有两个版本,Python2和Python3,最新版分别为2.7.12和3.5.2,现阶段大部分公司用的是Python2
Life is shot, you need Python. 人生苦短,我用Python。
TIOBE 2018发布了 8 月份的编程语言排行榜,前四名依然不变,分别是 Java、C、C++ 与 Python,其中值得关注的是 Python 以 6.992% 的占比逼近 7.471% 的 C++,另外 C 指数继续保持增加。
优势
简单————Python是一种表明简单主义思想的语言。阅读一个良好的Python程序就感受像是在 读英语同样,Python的这种伪代码本质是它最大的优势之一。它使你可以专一于解决问题而不是去搞明白语言自己。
易学————就如同你即将看到的同样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。
免费、开源————Python是FLOSS(自由/开放源码软件)之一。简单地说,你能够自由地发布这个软件的拷贝、阅读它的源代码、对它作改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为何Python如此优秀的缘由之一——它是由一群但愿看到一个更加优秀的Python的人创造并常常改进着的。
高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性————因为它的开源本质,Python已经被移植在许多平台上(通过改动使它可以工做在不一样平台上)。若是你当心地避免使用依赖于系统的特性,那么你的全部Python程序无需修改就能够在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台!
解释性————这一点须要一些解释。一个用编译性语言好比C或C++写的程序能够从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程经过编译器和不一样的标记、选项完成。当你运行你的程序的时候,链接/转载器软件把你的程序从硬盘复制到内存中而且运行。而Python语言写的程序不须要编译成二进制代码。你能够直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,而后再把它翻译成计算机使用的机器语言并运行。事实上,因为你再也不须要担忧如何编译程序,如何确保链接转载正确的库等等,全部这一切使得使用Python更加简单。因为你只须要把你的Python程序拷贝到另一台计算机上,它就能够工做了,这也使得你的Python程序更加易于移植。
面向对象————Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其余主要的语言如C++和Java相比,Python以一种很是强大又简单的方式实现面向对象编程。
可扩展性————若是你须要你的一段关键代码运行得更快或者但愿某些算法不公开,你能够把你的部分程序用C或C++编写,而后在你的Python程序中使用它们。
丰富的库————Python标准库确实很庞大。它能够帮助你处理各类工做,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其余与系统有关的操做。记住,只要安装了Python,全部这些功能都是可用的。这被称做Python的“功能齐全”理念。除了标准库之外,还有许多其余高质量的库,如wxPython、Twisted(是用Python实现的基于事件驱动的网络引擎框架)和Python图像库等等。规范的代码————Python采用强制缩进的方式使得代码具备极佳的可读性。
缺点
运行速度,有速度要求的话,用C++改写关键部分吧。
国内市场较小(国内以python来作主要开发的,目前只有一些web2.0公司)。但时间推移,目前不少国内软件公司,尤为是游戏公司,也开始规模使用他。
中文资料匮乏(好的python中文资料屈指可数)。托社区的福,有几本优秀的教材已经被翻译了,但入门级教材多,高级内容仍是只能看英语版。构架选择太多(没有像C#这样的官方.net构架,也没有像ruby因为历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)。不过这也从另外一个侧面说明,python比较优秀,吸引的人才多,项目也多。
Web应用开发
Python常常被用于Web开发。好比,经过mod_wsgi模块,Apache能够运行用Python编写的Web程序。Python定义了WSGI(是Python应用程序或框架和Web服务器之间的一种接口)标准应用接口来协调Http服务器与基于Python的Web程序之间的通讯。一些Web框架,如Django,TurboGears,web2py,Zope等,可让程序员轻松地开发和管理复杂的Web程序。
操做系统管理、服务器运维的自动化脚本
在不少操做系统里,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脚本。
科学计算
NumPy,SciPy,Matplotlib可让Python程序员编写科学计算程序。
桌面软件
PyQt、PySide、wxPython、PyGTK是Python快速开发桌面应用程序的利器。
服务器软件(网络软件)
Python对于各类网络协议的支持很完善,所以常常被用于编写服务器软件、网络爬虫。第三方库Twisted[ˈtwɪstɪd] 支持异步网络编程和多数标准的网络协议(包含客户端和服务器),而且提供了多种工具,被普遍用于编写高性能的服务器软件。
游戏
不少游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。
构思实现,产品早期原型和迭代
YouTube、Google、Yahoo!、NASA都在内部大量地使用Python。
上课主要以Python3为主
国内是python2和python3并存,官方如今极力推荐使用Python3
Python2与Python3的比较:
print语句
python2中print是一个语句,不论想输出什么,直接放到print关键字后面便可。python3里,print()是一个函数,像其余函数同样,print()须要你将要输出的东西做为参数传给它。
python2 |
python3 |
备注 |
|
print() |
输出一个空白行,python3须要调用不带参数的print() |
print 1 |
print(1) |
输出一个值,将值传入print()函数 |
print 1, 2 |
print(1,2) |
输出使用空格分割的两个值,使用两个参数调用print() |
<>比较运算符
Python2支持<>做为!=的同义词, python3只支持!=, 再也不支持<>
UNICODE字符串
python2中有两种字符串类型:Unicode字符串和非Unicode字符串。Python3中只有一种类型:Unicode字符串。
long 长整型
Python 2有为非浮点数准备的int和long类型。int类型的最大值不能超过sys.maxint,并且这个最大值是平台相关的。能够经过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。在Python 3里,只有一种整数类型int,大多数状况下,它很像Python 2里的长整型。因为已经不存在两种类型的整数,因此就没有必要使用特殊的语法去区别他们。
python3安装j教程:https://blog.csdn.net/ITLearnHall/article/details/81532150
安装目录介绍:
目录组织方式
关于如何组织一个较好的Python工程目录结构,已经有一些获得了共识的目录结构。
假设你的项目名为foo, 我比较建议的最方便快捷目录结构这样就足够了:
Foo/
|-- bin/
| |-- foo
|
|-- foo/
| |-- tests/
| | |-- __init__.py
| | |-- test_main.py
| |
| |-- __init__.py
| |-- main.py
|
|-- docs/
| |-- conf.py
| |-- abc.rst
|
|-- setup.py
|-- requirements.txt
|-- README
简要解释一下:
bin/: 存放项目的一些可执行文件,固然你能够起名script/之类的也行。
foo/: 存放项目的全部源代码。(1) 源代码中的全部模块、包都应该放在此目录。不要置于顶层 目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py。
docs/: 存放一些文档。
setup.py: 安装、部署、打包的脚本。
requirements.txt: 存放软件依赖的外部Python包列表。
README: 项目说明文件。
Tools目录:Python 提供的一些工具
wiki/ 若是有wiki,能够建立此目录
scripts/ 项目用到的各类脚本
tests/ 测试代码
lib/ 库文件,放自定义模块和包
etc 是Linux下的配置文件的老家, 不少管理和使用的修改都在这里
Share 是Python共享目录
Include是Python包含、共享目录
Tcl 桌面编程包
python目录 lib 和libs有什么区别
二者仍是有区别的,放在lib中的是被reference(引用)的,放在libs中的是被include的。放在libs中的文件会自动被Eclipse(下载)所include(包含)。因此不要把API(应用程序接)放到libs里去。好比ndk生成的so,是在libs中的,这时候你就须要把它拷贝到lib中,而不是libs中,不然你ref
配置环境变量:https://blog.csdn.net/ITLearnHall/article/details/81318939
Python脚本结构
.py 文件
以 .py 做扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行。固然,也可用文本编辑器进行修改。
.pyc 文件
以 .pyc 做扩展名的文件是 python 编译文件。.pyc 文件是不能用文本编辑器进行编辑的,其优势是 .pyc 文件的执行速度要远快于 .py 文件。至于为何要有 .pyc 文件,这个需求太明显了,由于 .py 文件是可直接看到源码的,如果软件开发商的话,不可能把源码泄漏出去?因此,就需编译成 .pyc 后再发布。
.pyw 文件
.pyc 文件执行时,桌面会出现相似 CMD 命令的黑色 shell 窗口,十分难看,因而 .pyw 文件就应运而生了。.pyw 文件与 .pyc 文件的执行,本质上并没什么区别,只是 .pyw 文件执行的时候不会出现相似 CMD 命令的黑色 shell 窗口。.pyw 文件格式主要是设计用来运行纯 GUI 图形用户界面程序的。 纯 GUI 图形用户界面程序的用户不须要看到相似 CMD 命令的黑色 shell 控制台窗口。.pyw 文件运行时,全部 stdout、stderr 输出无效,全部原 stdin 的读取只会获得 EOF。
值得一提的是,开发纯 GUI 图形用户界面程序时,可暂时把 .pyw 改为 .py,以便运行时调出控制台窗口,看到全部错误信息,方便修改、调试。
.pyo 文件
.pyo 文件是优化编译后的程序。 “python -O 源文件” 便可将源程序编译为 .pyo 文件。一样,.pyo 文件也是不能用文本编辑器进行编辑的。
.pyd 文件
.pyd 文件并非用 python 编写成的,.pyd 文件通常是其余语言编写的 python 扩展模块。.pyd 文件是用 D 语言按照必定格式编写,并处理成二进制的文件。
窗用 python.exe 运行 .py ,用 pythonw.exe 运行 .pyw 。
这纯粹是由于安装视窗版 Python 时,扩展名 .py 自动被登记为用 python.exe 运行的文件,
而 .pyw 则被登记为用 pythonw.exe 运行。
.py 和 .pyw 之间的“其它差异”全都是 python.exe 和 pythonw.exe 之间的差异。
跟 python.exe 比较起来,pythonw.exe 有如下的不一样:
1)执行时不会弹出控制台窗口(也叫 DOS 窗口)
2)全部向原有的 stdout 和 stderr 的输出都无效
3)全部从原有的 stdin 的读取都只会获得 EOF
.pyw 格式是被设计来运行开发完成的纯图形界面程序的。
纯图形界面程序的用户不须要看到控制台窗口。
安装完成,打开命令窗口:输入python3
打印Python的第一个程序hello world (在 Windows命令提示符(cmd)中输入如下命令进行 pip的更新:python -m pip install -U pip)