1989年的圣诞节期间,吉多·范罗苏姆(Guido van Rossum)为了在阿姆斯特丹寻找一门“课余”编程项目打发时间,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。之因此选中Python做为程序的名字,是由于他是BBC电视剧——蒙提·派森的飞行马戏团(Monty Python‘s Flying Circus)的爱好者。java
python的创始人:Guido van Rossumpython
废话不说,直接上图程序员
由上图可见,Python总体呈上升趋势,反映出Python应用愈来愈普遍而且也逐渐获得业内的承认!!!web
Python能够应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎全部大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司普遍使用Python来作的事通常有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。shell
C 和 Python、Java、C#等
: C语言: 代码编译获得 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工做
其余语言: 代码编译获得 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行编程
Python 和 C Python这门语言是由C开发而来
: 对于使用:Python的类库齐全而且使用简洁,若是要实现一样的功能,Python 10行代码能够解决,C可能就须要100行甚至更多.
对于速度:Python的运行速度相较与C,绝逼是慢了服务器
Python 和 Java、C#等
: 对于使用:Linux原装Python,其余语言没有;以上几门语言都有很是丰富的类库支持
对于速度:Python在速度上可能稍显逊色网络
因此,Python和其余语言没有什么本质区别,其余区别在于:擅长某领域、人才丰富、先入为主。框架
Web程序:
: Python常常被用于Web开发。好比,经过mod_wsgi模块,Apache能够运行用Python编写的Web程序。使用Python语言编写的Gunicorn做为Web服务器,也可以运行Python语言编写的Web程序。Python定义了WSGI(Web Server Gateway Interface)标准应用接口来协调Http服务器与基于Python的Web程序之间的沟通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可让程序员轻松地开发和管理复杂的Web程序。less
GUI开发:
: Python自己包含的Tkinter库可以支持简单的GUI(Graphical User Interface)开发。可是愈来愈多的Python程序员选择wxPython或者PyQt等GUI包来开发跨平台的桌面软件。使用它们开发的桌面软件运行速度快,与用户的桌面环境相契合。经过PyInstaller还能将程序发布为独立的安装程序包。
操做系统:
: 在不少操做系统里,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。
其余:
: NumPy、SciPy、Matplotlib可让Python程序员编写科学计算程序。有些公司会使用Scons代替make构建C++程序。
不少游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。不少游戏,如EVE Online使用Python来处理游戏中繁多的逻辑。
python版本的选择:从开源项目看,支持py3的比例已经大大提升,知名的项目通常都支持py2.7和py3+。因此,若是没有历史遗留问题或者是新项目,建议直接使用py3.
: py3比py2更规范统一。
py3中字符串默认编码使用Unicode。
py3 解决了py2中字符串和二进制数据的烂摊子。py2中字符串既能够表示文本数据能够表示二进制数据
py2.7是2.x系列的最后一个版本,已经中止开发,再也不增长新功能。2020年终止支持。
`Beautiful is better than ugly. 优美胜于丑陋 Explicit is better than implicit. 明了胜于晦涩 Simple is better than complex. 简洁胜于复杂 Complex is better than complicated. 复杂胜于凌乱 Flat is better than nested. 扁平胜于嵌套 Sparse is better than dense. 间隔胜于紧凑 Readability counts. 可读性很重要 Special cases aren't special enough to break the rules. 即使假借特例的实用性之名,也不可违背这些规则 Although practicality beats purity. 觉对不容许特列必须按照这个规则 Errors should never pass silently. 不要包容全部错误 Unless explicitly silenced. 除非你肯定须要这样作 In the face of ambiguity, refuse the temptation to guess. 当存在多种可能,不要尝试去猜想 There should be one-- and preferably only one --obvious way to do it. 而是尽可能找一种,最好是惟一一种明显的解决方案 Although that way may not be obvious at first unless you're Dutch. 虽然这并不容易,由于你不是 Python 之父 Now is better than never. 作也许好过不作, Although never is often better than *right* now. 但不假思索就动手还不如不作 If the implementation is hard to explain, it's a bad idea. 若是你没法向人描述你的方案 If the implementation is easy to explain, it may be a good idea. 那确定不是一个好方案 反之亦然 Namespaces are one honking great idea -- let's do more of those! 命名空间是一种绝妙的理念,咱们应当多加利用`
by Tim Peters
Python 设计哲学:“优雅”、“明确”、“简单”
#!/usr/bin/env python #-*- conding:utf-8 -*- print "Hello World"
左边的部分 python提供的大量模块、库 和用户自定义的模块。 中间的部分 python的核心——解释器,也能够叫虚拟机,这里的箭头方向是python运行过程当中数据流的方向, Scanner对应词法分析,用来将文件或命令输入的每一行代码切分为一个个的token; Parser对应语法分析,在Scanner的分析结果上进行语法分析,创建抽象语法树(AST); Compiler 则根据创建的AST 生成指令集合——字节码; Code Evaluator 执行字节码文件,因此又被称为虚拟机。 右边的部分 对象/类型、内存分配 和解释器之间的箭头表示二者之间的“使用”关系; 运行时状态与解释器之间的箭头表示“修改”关系。python在执行的过程当中会不断的修改当前解释器的所处的状态,在不一样的状态之间切换。
咱们写一个最简单的python程序。 新建 first.py文件,文件内容以下:
#!/usr/bin/env python # -+-coding:utf-8-+- print("First Print!")
再建 second.py
#!/usr/bin/env python # -+-coding:utf-8-+- import first print("Second print!")
而后咱们执行第二个文件:python second.py
输出:
First Print ! Second Print !
说明:
: 执行Python代码时,若是导入了其余的 .py 文件,那么,执行过程当中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译以后产生的字节码。
ps:代码通过编译能够产生字节码;字节码经过反编译也能够获得代码。(任何字节码经过反编译均可以获得代码)
下面解释一下 python 的执行过程:
这个时候咱们会发现生成了一个 pycache 目录; 目录下有文件first.cpython-35.pyc。 若是python版本是2.x 则会在当前目录直接生成first.pyc。 咱们说python是解释型语言 ,那这个pyc是什么文件呢? 按照通常的理解来讲,pyc 中的c 应该是compile的意思, 既然是这样,那么python代码是如何被转换成一系列的机器指令呢?如今咱们就好好深究一下这里的因果关系。 其实本质上python和java、C#是同样的,三者的程序执行原理均可以用两个词归纳——虚拟机、字节码。 在python中有一个很是核心的东西——interpreter,当咱们在命令行敲入python,当咱们在shell中敲入命令python的时候, 目的就是为了激活这个解释器; 当咱们执行 python second.py的时候,python解释器当即被激活,而后执行python程序。在pyhton的解释器还要完成一个很是重要的工做——编译.py文件。
python解释器在执行程序的时候,首先就是对文件中的python源代码进行编译,生成一个python的字节码(byte code),而后 将字节码交给python虚拟机,虚拟机则按照顺序一条一条的执行字节码,直到程序执行完。 上面在执行python second.py时,咱们发现只有second.py文件生成了pyc文件,缘由咱们不知道,可是咱们能够猜想python在执行的时候,只对须要编译的文件进行编译。那什么是须要编译的文件呢? 好比说,first.py文件不仅被 second.py调用, 还被其余的py文件调用,这个时候,若是把 first.py 进行编译,那下次就直接调用编译后的pyc文件,这样就加快了执行速度。
那么有人就要问了,若是我修改了first.py文件,下次调用first.pyc的时候不就不是最新的代码了吗,对于这个咱们并不须要担忧。pyc文件中包含自身建立的时间,在python程序执行的时候,首先会尝试加载pyc文件,在加载的过程当中,python会比对py文件和 pyc文件的时间,若是pyc文件时间早于py文件时间,就会从新编译py文件,生成新的pyc文件, 不然就会直接调用py从文件。
语法要求
: 强烈建议你在每一个缩进层次使用 单个制表符 或 四个空格。
不要混合使用制表符和空格来缩进,由于这在跨越不一样的平台的时候,没法正常工做。
双引号中的字符串与单引号中的字符串的使用彻底相同。
利用三引号,你能够指示一个多行的字符串。能够在三引号中自由的使用单引号和双引号。
值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。
好的编辑器能提升开发代码的效率!
变量
: 变量以字母或下划线开头,由字母、数字或下划线组成,变量名称区分大小写。
能够直接输入变量名查看变量值。
下划线'_'表示最后一个表达式的值。
#!/usr/bin/env python # -*- coding: utf-8 -*- name = "nhy"
上述代码声明了一个变量,变量名为: name,变量name的值为:nhy
变量的做用:昵称,其代指内存里某个地址中保存的内容
变量的赋值:
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "wupeiqi" name2 = name1
如下关键字不能声明为变量名
: ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
外层变量,能够被内层变量使用
内层变量,没法被外层变量使用
在python中没有常量的概念,全部的数值均可以改变,
: 定义一个常量应该用大写的形式。
AGE = 37 就是常量,他是大写的!是约定俗成的。可是他是能够改的!
#!/usr/bin/env python
: Shebang 是一个由井号和叹号构成的字符串行(#!), 其出如今文本文件的第一行的前两个字符. 在文件中存在Shebang的状况下, 类Unix操做系统的程序载入器会分析Shebang后的内容, 将这些内容做为解释器指令, 并调用该指令, 并将载有Shebang的文件路径做为该解释器的参数。#!先用于帮助内核找到Python解释器, 可是在导入模块时, 将会被忽略. 所以只有被直接执行的文件中才有必要加入#!
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认 ASCII)。
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其余西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,因此,ASCII码最多只能表示 256 个符号。
显然 ASCII 码没法将世界上的各类文字和符号所有表示,所以就须要一种能够表明全部字符和符号的编码,即:Unicode
Unicode(万国码)是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每一个字符设定了统一而且惟一的二进制编码,规定全部的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536。
UTF-8,是对Unicode编码的压缩和优化,他再也不使用最少使用2个字节,而是将全部的字符和符号进行分类:ASCII 码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
Python2中文件的默认编码为ASCII,在文件中含有中文的时候就会报错,
所以要在文件开头写上:
# -*- coding: utf-8 -*- 指定编码类型为utf-8
python3中文件的默认编码为UTF-8,已经不存在上述问题。