共计 7839 个字符,预计需要花费 20 分钟才能阅读完成。
download: Python 自动化测试开发实战 一门能待业的测试课
====
批改
自从 20 世纪 90 年代初 Python 语言诞生至今,它已被逐渐宽泛使用于体系解决使命的解决和 Web 编程。
Python 的创始人为荷兰人吉多·范罗苏姆 [6] (Guido van Rossum)。1989 年圣诞节期间,在阿姆斯特丹,Guido 为了打发圣诞节的无趣,决心开发一个新的脚本说明程序,作为 ABC 语言的一种继承。之所以选中 Python(大蟒蛇的意思)作为该编程语言的姓名,是取自英国 20 世纪 70 年代首播的电视悲剧《蒙提·派森的翱翔马戏团》(Monty Python’s Flying Circus)。
ABC 是由 Guido 加入布局的一种教育语言。就 Guido 本人看来,ABC 这种语言非常漂亮和强壮,是专门为非专业程序员布局的。可是 ABC 语言并没有胜利,究其原因,Guido 认为是其非敞开造成的。Guido 决心在 Python 中避免这一过错。一起,他还想完结在 ABC 中闪现过但未曾完结的货色。
就这样,Python 在 Guido 手中诞生了。可能说,Python 是从 ABC 关上起来,首要受到了 Modula-3(另一种相当漂亮且强壮的语言,为小型个体所布局的)的影响。而且联合了 Unix shell 和 C 的习惯。
Python [7] 现已成为最受欢迎的程序布局语言之一。自从 2004 年往后,python 的使用率呈线性增加。Python 2 于 2000 年 10 月 16 日公布,安稳版别是 Python 2.7。Python 3 于 2008 年 12 月 3 日公布,不彻底兼容 Python 2。[6] 2011 年 1 月,它被 TIOBE 编程语言排行榜评为 2010 年度语言。[8]
标识
因为 Python 语言的简洁性、易读性以及可扩展性,在国外用 Python 做迷信核算的钻研机构日益增多,一些出名大学现已选用 Python 来传授程序布局课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的核算机迷信及编程导论就使用 Python 语言教育。很多开源的迷信核算软件包都供应了 Python 的调用接口,例如闻名的核算机视觉库 OpenCV、三维可视化库 VTK、医学图画解决库 ITK。而 Python 专用的迷信核算扩大库就更多了,例如如下 3 个非常经典的迷信核算扩大库:NumPy、SciPy 和 matplotlib,它们别离为 Python 供应了疾速数组解决、数值运算以及绘图功能。因此 Python 语言及其很多的扩大库所形成的开发环境非常适合工程技能、科研人员解决试验数据、制作图表,乃至开发迷信核算使用程序。2018 年 3 月,该语言作者在邮件列表上宣告 Python 2.7 将于 2020 年 1 月 1 日停止撑持。用户假设想要在这个日期之后继续失去与 Python 2.7 无关的撑持,则需要付费给商业供货商。[9]
下载设施
批改
在您初步之前,你的核算机需要 Python,但您可能不需要下载它。首要查看 (在同级目录下在命令行窗口输出 python) 有没有设施 Python。假设你看到了一个 Python 阐冥具的呼应,那么就能在它的浮现窗口中失去一个版别号。个别的版别都可能做到 Python 的向前兼容。
假设您需要设施,您无妨下载最近安稳的版别。就是那个以没有被符号作为 alpha 或 Beta 发行的最高的版别。目前最安稳的版别是 Python3.0 以上 [10]
假设你使用的操作体系是 Windows:其时最安稳的 Windows 版别下载是 ”Python 3.9.0 for Windows”
假设你使用的是 Mac,MacOS 10.2 (Jaguar), 10.3 (_Panther_) and 10.4 (Tiger)现已集成设施了 Python,可是你大概需要设施最近通用的构架(build)。
对于 Red Hat,设施 python2 和 python2-devel 包。
对于 Debian,设施 python2.5 和 python2.5-dev 包。
言语特征
批改
格调
Python 在布局上保持了分明齐截的格调,这使得 Python 成为一门易读、易爱护,而且被大量用户所欢送的、用处宽泛的语言。
规划者开发时总的领导思维是,对于一个特定的问题,只需有一种最好的办法来解决就好了。这在由 Tim Peters 写的 Python 格言(称为 The Zen of Python)里边表述为:There should be one– and preferably only one –obvious way to do it. 这正好和 Perl 语言(另一种功能类似的低档动静语言)的核心思维 TMTOWTDI(There’s More Than One Way To Do It)彻底相同。
Python 的作者无意的布局限制性很强的语法,使得欠好的编程习惯(例如 if 句子的下一行不向右缩进)都不能通过编译。其间很重要的一项就是 Python 的缩进规矩。
一个和其余大多数语言(如 C)的差别就是,一个模块的距离,彻底是由每行的首字符在这一行的方位来决定的(而 C 语言是用一对花括号 {} 来清晰的定出模块的距离的,与字符的方位毫无关系)。这一点早年引起过争议。因为自从 C 这类的语言诞生后,语言的语法含意与字符的摆放办法别离开来,早年被认为是一种程序语言的前进。不过不可否认的是,通过强制程序员们缩进(蕴含 if,for 和函数界说等全副需要使用模块的当地),Python 的确使得程序更加分明和丑陋。
与 MATLAB
说起迷信核算,首要会被提到的可能是 MATLAB。可是除了 MATLAB 的一些专业性很强的货色箱还无奈被代替之外,MATLAB 的大部分罕用功能都可能在 Python 世界中找到相应的扩大库。和 MATLAB 比拟,用 Python 做迷信核算有如下短处:
● 首要,MATLAB 是一款商用软件,而且价格不菲。而 Python 彻底收费,很多开源的迷信核算库都供应了 Python 的调用接口。用户可能在任何核算机上收费设施 Python 及其绝大多数扩大库。
● 其次,与 MATLAB 比拟,Python 是一门更易学、更审慎的程序布局语言。它能让用户编写出更易读、易爱护的代码。
● 毕竟,MATLAB 首要专一于工程和迷信核算。可是即使在核算畛域,也经常会遇到文件解决、界面布局、网络通信等各种需要。而 Python 有着丰硕的扩大库,可能容易完结各种低档使命,开发者可能用 Python 完结无缺使用程序所需的各种功能。
布局定位
Python 的布局哲学是“典雅”、“清晰”、“简略”。因此,Perl 语言中“总是有多种办法来做同一件事”的理念在 Python 开发者中个别是难以忍受的。Python 开发者的哲学是“用一种办法,最好是只有一种办法来做一件事”。在布局 Python 语言时,假设面临多种筛选,Python 开发者个别会拒绝花俏的语法,而筛选清晰的没有或者很少有歧义的语法。因为这种布局观点的差别,Python 源代码个别被认为比 Perl 具备更好的可读性,而且可能撑持大布局的软件开发。这些准则被称为 Python 格言。在 Python 阐冥具内作业 import this 可能取得无缺的列表。
Python 开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的放慢作业速度的补丁个别不会被合并到 Python 内。所以很多人认为 Python 很慢。不过,根据二八法则,大多数程序对速度要求不高。在某些对作业速度要求很高的情况,Python 规划师偏向于使用 JIT 技能,或者用使用 C /C++ 语言改写这部分程序。可用的 JIT 技能是 PyPy。
Python 是彻底面向政策的语言。函数、模块、数字、字符串都是政策。而且彻底撑持继承、重载、派生、多继承,有益于加强源代码的复用性。Python 撑持重载运算符和动静类型。相干于 Lisp 这种传统的函数式编程语言,Python 对函数式布局只供应了无限的撑持。有两个标准库 (functools, itertools) 供应了 Haskell 和 Standard ML 中久经考验的函数式程序布局货色。
尽管 Python 可能被粗略地分类为“脚本语言”(script language),但实际上一些大布局软件开发打算例如 Zope、Mnet 及 BitTorrent,Google 也宽泛地使用它。Python 的撑持者较喜爱称它为一种低档动静编程语言,起因是“脚本语言”泛指仅作简略程序布局使命的语言,如 shellscript、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 where we can, C++ where we must,在管制硬件的场合使用 C ++,在疾速开发时候使用 Python。”
施行
Python
Python 在施行时,首要会将.py 文件中的源代码编译成 Python 的 byte code(字节码),而后再由 Python Virtual Machine(Python 虚拟机)来施行这些编译好的 byte code。这种机制的根柢思维跟 Java,.NET 是独特的。可是,Python Virtual Machine 与 Java 或.NET 的 Virtual Machine 不同的是,Python 的 Virtual Machine 是一种更低档的 Virtual Machine。这儿的低档并不是个别含意上的低档,不是说 Python 的 Virtual Machine 比 Java 或.NET 的功能更强壮,而是说和 Java 或.NET 比拟,Python 的 Virtual Machine 距离切实机器的距离更远。或者可能这么说,Python 的 Virtual Machine 是一种抽象层次更高的 Virtual Machine。依据 C 的 Python 编译出的字节码文件,个别是.pyc 格局。除此之外,Python 还可能以交互方式作业,比如干流操作体系 Unix/Linux、Mac、Windows 都可能间接在命令形式下间接作业 Python 交互环境。间接下达操作指令即可完结交互操作。
根柢语法
批改
Python
Python 的布局政策之一是让代码具备高度的可浏览性。它布局时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来参差丑陋。它不像其余的动态语言如 C、Pascal 那样需要反复书写申明句子,也不像它们的语法那样经常有特地情况和意外。
Python 开发者无意让违反了缩进规矩的程序不能通过编译,以此来强制程序员养成杰出的编程习惯。而且 Python 语言使用缩进表明句子块的初步和退出(Off-side 规矩),而非使用花括号或者某种关键字。增加缩进表明句子块的初步,而缩小缩进则表明句子块的退出。缩进成为了语法的一部分。例如 if 句子:python3
1
2
3
4
5
age = int(input(“ 请输出你的年纪: “))
if age < 21:
print(“ 你不能买酒。”)
print(“ 不过你能买口香糖。”)
print(“ 这句话在 if 句子块的里面。”)
根据 PEP 的规定,有必要使用 4 个空格来表明每级缩进。使用 Tab 字符和其它数用意空格尽管都可能编译通过,但不合乎编码标准。撑持 Tab 字符和其它数用意空格仅仅是为兼容很旧的的 Python 程序和某些有问题的批改程序。
管制句子
if 句子,当条件建设时作业句子块。经常与 else, elif(相当于 else if) 合作使用。
for 句子,遍历列表、字符串、字典、调集等迭代器,顺次解决迭代器中的每个元素。
while 句子,当条件为真时,循环作业句子块。
try 句子,与 except,finally 合作运用处理在程序作业中出现的反常情况。
class 句子,用于界说类型。
def 句子,用于界说函数和类型的办法。
pass 句子,表明此行为空,不作业任何操作。
assert 句子,用于程序调试阶段时测试作业条件是否满足。
with 句子,Python2.6 往后界说的语法,在一个场景中作业句子块。比如,作业句子块前加密,而后在句子块作业退出后解密。
yield 句子,在迭代器函数内使用,用于回来一个元素。自从 Python 2.5 版别往后。这个句子变成一个运算符。
raise 句子,制作一个过错。
import 句子,导入一个模块或包。
from … import 句子,从包导入模块或从模块导入某个政策。
import … as 句子,将导入的政策赋值给一个变量。
in 句子,判断一个政策是否在一个字符串 / 列表 / 元组里。
表达式
Python 的表达式写法与 C /C++ 类似。只是在某些写法有所不同。
首要的算术运算符与 C /C++ 类似。+, -, , /, //, *, ~, % 别离表明加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取余。
Python 使用 and, or, not 表明逻辑运算。
is, is not 用于比拟两个变量是否是同一个政策。in, not in 用于判断一个政策是否归于别的一个政策。
Python 撑持“列表推导式”(list comprehension),比如核算 0 - 9 的平方和:
1
2
sum(x * x for x in range(10))
285
Python 使用 lambda 表明匿名函数。匿名函数体只能是表达式。比如:
1
2
3
add=lambda x, y : x + y
add(3,2)
5
Python 使用 y if cond else x 表明条件表达式。意思是当 cond 为真时,表达式的值为 y,不然表达式的值为 x。相当于 C ++ 和 Java 里的 cond?y:x。
Python 差别列表 (list) 和元组 (tuple) 两种类型。list 的写法是[1,2,3],而 tuple 的写法是(1,2,3)。可能改变 list 中的元素,而不能改变 tuple。在某些情况下,tuple 的括号可能省掉。tuple 对于赋值句子有特地的解决。因此,可能一起赋值给多个变量,比如:
1
x, y=1,2 # 一起给 x,y 赋值,毕竟成果:x=1, y=2
特地地,可能使用以下这种办法来交换两个变量的值:
1
x, y=y, x #毕竟成果:y=1, x=2
Python 使用 '(单引号)和 ”(双引号)来表明字符串。与 Perl、Unix Shell 语言或者 Ruby、Groovy 等语言不雷同,两种符号成果雷同。个别地,假设字符串中出现了双引号,就使用单引号来表明字符串; 反之则使用双引号。假设都没有出现,就依集体爱好筛选。出现在字符串中的 (反斜杠) 被说明为特地字符,比如 n 表明换行符。表达式前加 r 批示 Python 不说明字符串中出现的。这种写法个别用于编写正则表达式或者 Windows 文件路径。
Python 撑持列表切开 (list slices),可能取得无缺列表的一部分。撑持切开操作的类型有 str, bytes, list, tuple 等。它的语法是 …[left:right] 或者 …[left:right:stride]。假设 nums 变量的值是[1, 3, 5, 7, 8, 13, 20],那么上面几个句子为真:
nums[2:5] == [5, 7, 8] 从下标为 2 的元素切开到下标为 5 的元素,但不蕴含下标为 5 的元素。
nums[1:] == [3, 5, 7, 8, 13, 20] 切开到毕竟一个元素。
nums[:-3] == [1, 3, 5, 7] 从最初步的元素一贯切开到倒数第 3 个元素。
nums[:] == [1, 3, 5, 7, 8, 13, 20] 回来全副元素。改变新的列表不会影响到 nums。
nums[1:5:2] == [3, 7] 从下标为 1 的元素切开到下标为 5 的元素,且步长为 2。
函数
Python 的函数撑持递归、默认参数值、可变参数,但不撑持函数重载。为了加强代码的可读性,可能在函数后书写“文档字符串”(Documentation Strings,或者简称 docstrings),用于说明函数的成果、参数的类型与含意、回来值类型与取值布局等。可能使用内置函数 help()打印出函数的使用帮助。比如:
def randint(a, b):
… “Return random integer in range [a, b], including both end points.”…
help(randint)
Help on function randint in module __main__:
randint(a, b)
Return random integer inrange[a, b], including both end points.
政策的办法
政策的办法是指绑定到政策的函数。调用政策办法的语法是 instance.method(arguments)。它等价于调用 Class.method(instance, arguments)。当界说政策办法时,有必要显式地界说第一个参数,个别该参数名都使用 self,用于拜访政策的外部数据。这儿的 self 相当于 C ++, Java 里边的 this 变量,可是咱们还可能使用任何其它非法的参数名,比如 this 和 mine 等,self 与 C ++,Java 里边的 this 不彻底雷同,它可能被看作是一个习惯性的用法,咱们传入任何其它的非法名称都行,比如:
class Fish:
def eat(self,food):
if food is not None:
self.hungry=False
class User:
def __init__(myself,name):
myself.name=name
构造 Fish 的实例:
f=Fish()
以下两种调用办法是等价的:
Fish.eat(f,”earthworm”)
f.eat(“earthworm”)
u=User(‘username’)
print(u.name)
Python 晓得一些以“__”初步并以“__”结束的特地办法名,它们用于完结 [运算符重载] 和完结多种特地功能。
类型
Python 选用动静类型体系。在编译的时候,Python 不会查看政策是否具备被调用的办法或者特点,而是直至作业时,才做出查看。所以操作政策时可能会抛出反常。不过,尽管 Python 选用动静类型体系,它一起也是强类型的。Python 阻止没有清晰界说的操作,比如数字加字符串。
与其它面向政策语言雷同,Python 答应程序员界说类型。构造一个政策只需要像函数雷同调用类型即可,比如,对于后面界说的 Fish 类型,使用 Fish()。类型本身也是特地类型 type 的政策(type 类型本身也是 type 政策),这种特地的布局答应对类型进行反射编程。
Python 内置丰硕的数据类型。与 Java、C++ 比拟,这些数据类型无效地缩小代码的长度。上面这个列表简要地描述了 Python 内置数据类型(实用于 Python 3.x):