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):