转载请注明出处❤️
作者:测试蔡坨坨
原文链接:caituotuo.top/3bbc3146.html
你好,我是测试蔡坨坨。
众所周知,Python语法简洁、功能强大,通过简单的代码就能实现很多实用、有趣的功能,因为它拥有丰富的标准模块和第三方库,因此也成为自动化测试的热门语言,当然除了Python,其他编程语言也能做自动化,至于自动化测试选择什么编程语言,可参考往期文章「做自动化测试选择 Python 还是 Java? 」。
要想使用Python语言编写脚本或开发平台进行自动化测试,首先需要学习Python基础语法,通过本篇文章,带你快速入门Python并掌握基础语法。
Python简介 背景介绍 Python的格言:Life is short,use python. 即“人生苦短,我用Python。”
由Guido van Rossum于1989年圣诞节为打发无聊的时间,而开发的一个新的脚本解释程序,第一个公开发行版本于1991年。
至于为什么选中Python作为语言名字,是因为他是一个叫Monty Python的喜剧团队爱好者。
特点 优势
优雅、明确、简单。
Python是一个下限特别低(少儿编程),上限特别高的编程语言(人工智能)。
上手容易,特别适合没有编程经验的小白作为第一门编程语言,特别容易培养兴趣。
语法简洁,表达能力强,通过简单代码就能实现很多实用的功能。
代码量小,维护成本低,编程效率高,标准库强大,第三方库非常丰富(比如自动化测试会用到的Selenium、Appium、Requests等),目前已经成为全世界最广泛使用的编程语言之一。
同样的问题,用不同的语言解决,代码量差距多,一般情况下Python是Java的1/5,Java需要十行,Python可能只需要两行,所以说人生苦短,我用Python,多留点时间做点自己喜欢的事情吧,不要浪费太多时间在编码上面。
解释运行。Python是一种解释型语言(脚本语言)。和C/C++
不同,不是先将源代码文件转化成可执行文件,再执行,而是直接由Python解释器一行一行的读取源代码,每读一行就执行一行。但严格意义上讲,Python算是一种“半编译,半解释”型语言。一方面,Python解释器会按行读取源代码文件,然后会将源代码转为供Python解释器直接执行的“字节码”,然后再执行字节码。
跨平台。Python是基于Python的解释器来进行执行。只要某个操作系统/平台上能运行Python解释器,就可以完美的运行Python的源代码。主流的Windows、Linux、Mac等操作系统上都能够很好地支持Python。
可扩展性强。Python可以很容易的调用C/C++
语言。如果觉得哪里的逻辑性能不能满足要求,可以使用C/C++
重构部分模块,用Python调用。
劣势 执行效率较低,因为Python是一种解释型语言,所以程序执行效率比较低,依赖解释器。
什么是编译型语言和解释型语言?
编译型语言:
程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。
程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。
解释型语言:
程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。
程序执行效率比较低,依赖解释器,跨平台性好。如Python、JavaScript、Perl、Shell等。
但是,在摩尔定律的作用下,硬件越来越便宜,反而是开发人员的成本越来越高,一些好的编程实践可以帮助我们写出比较高性能的代码,同时,Python解释器的执行效率也在不断被优化。
Python版本 Python3虽然是Python2的升级版,但是很多语法并不兼容,因此现在不建议学习Python2,直接学习Python3即可。
关于兼容性:
C++
能非常好的兼容C语言(C语言写的代码可以直接使用C++
编译器进行编译),但是也意味着C++
背负着很多C语言的历史包袱。
但是Python 3 和Python 2 很多地方不兼容(Python 2 写的代码,不能很顺利的在Python 3 的解释器上执行)。
这样做是好还是坏,不便评说,还是要看几年之后的最终结果是好是坏,才能盖棺定论。这样意味着很多已经用Python 2 写好的代码不会很顺利的升级到Python 3.。
但是这样也意味着Python 3 可以不用背负历史包袱,大刀阔斧的把一些不合理的地方修改掉。
官方的说法是,Python 2 最多维护到2020年便停止更新。
Python解释器和PyCharm编辑器 Python解释器的安装
在Python官网下载对应机器的安装包:https://www.python.org
双击下载好的Python安装包
如果未勾选Add Python 3.7 to PATH,需要手动配置环境变量(如果已勾选可跳过这一步,直接到第4步)
在cmd命令下输入python,验证是否配置成功
PyCharm集成开发工具
PyCharm是一种Python IDE (Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python 语言开发时提高其效率的工具,比如调试 、语法高亮 、项目管理 、代码跳转、智能提示、自动完成 、单元测试 、版本控制 。此外,该IDE提供了一些高级功能,以用于支持Django 框架下的专业Web 开发。
Python基础语法 变量赋值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 counter = 0 miles = 1000.00 name = "poo-poo-cai" kilometers = 1.666 * miles print(counter, miles, name, kilometers) n = 10 n = n * 10 n *= 10 print(n) n += 1 print(n)
标准数据类型 Python3中有六个标准的数据类型:数字、字符串、列表、元组、字典、集合。
Number(数字) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 a = 1 print(type (a)) b = 0.1 print(type (b)) c = True print(type (c)) d = 10 + 5j print(type (d)) num = 222 result = isinstance (num, int ) print(result) b1 = True sum = b1 + 2 print(sum )
String(字符串) 字符串基础应用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 str1 = 'caituotuo' str2 = "caituotuo" str3 = """caituotuo""" str4 = '''caituotuo''' print(str1, str2, str3, str4) str5 = 'I am "caituotuo"' print(str5) name = 'My name is \n cai.' print(name) str6 = '\\index\\' print(str6) str7 = 'hello world!' print(str7[0 ]) print(str7[-1 ]) print(str7[1 :3 ]) print(str7[:3 ]) print(str7[3 :]) print(str7[:]) print(str7[::2 ]) print(str7[::-1 ]) str8 = 'tester' str9 = 'cai' print(str8 + str9) print(str8 * 1 ) print(str8 * 0 ) print(str8 * 3 ) print(str8 * -1 ) str10 = 'tester' print(type (str10[0 ])) name = 'caituotuo' num = 1 print('尊敬的%s用户,您抽到的码号是%d' % (name, num)) str11 = 'hello world!' print(len (str11)) print(r'/n hello /n world!' )
字符串合并和拆分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 b = "-" a = ["wel" , "come" , "to" , "beijing" ] print(b.join(a)) c = "he ll o wor l d !" print(c.split(" " ))
字符串常用函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 a = "hello world. my name is poo poo cai" print(a.startswith("he" )) print(a.endswith("cai" )) print(a.startswith("cai" )) b = " welcome to my house \n " print(b) print(b.strip(), end="---" ) c = "hello world!" print("\n" ) print(c.find("wor" )) print(c[6 ]) print(c.find("123" )) d = "welcome to my house!" print(d.replace("house" , "home" )) print(d) e = "123456" f = "abc" g = "123abc" print(e.isalpha()) print(e.isdigit()) print(f.isdigit(), f.isalpha(), g.isdigit(), g.isalpha())
List(列表)/Tuple(元组) 列表和元组基础应用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 a_list = [1 , 3.666 , [1 , 2 , 3 ], {"name" : 20 , 20 : 10 }, 4 , (1 , 2 , 3 , 4 ), "string" , True ] print(a_list, type (a_list)) print(a_list[0 ], a_list[-1 ]) a_tuple = (1 , 2 , 3 , 4 ) print(a_tuple, type (a_tuple))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 a_list = [1 , 3.666 , [1 , 2 , 3 ], {"name" : 20 , 20 : 10 }, 4 , (1 , 2 , 3 , 4 ), "string" , True ] print(a_list[0 :2 ]) print(a_list[:]) print(a_list[::-1 ]) a_tuple = (1 , 2 , 3 , 4 ) a_list[0 ] = 0 print(a_list) a_tuple02 = (1 , 2 , [1 , 2 , 3 , 4 ]) print(a_tuple02) a_tuple02[2 ][0 ] = 0 print(a_tuple02)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 a_list = [1 , 5 , 2 , 3 , 80 , 55 , 66 ] a_list02 = sorted (a_list) print(a_list) print(a_list02) print(sorted (a_list, reverse=True )) a_list03 = ["abc" , "name" , "u" ] print(sorted (a_list03, key=len )) a_list04 = [1 , 5 , 2 , 6 ] print(a_list04) a_list04.sort() print(a_list04)
列表常用操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 a_list = [1 , 2 ] a_list.append(3 ) print(a_list) a_list02 = [6 , 5 , 4 , 3 , 2 , 1 ] del a_list02[0 ]print(a_list02) a_list02.remove(3 ) print(a_list02) a = ["abc" , 1233 ] b = ["xyz" , 789 ] c = ["abc" , 823 ] print(a < b) print(b < c) print(b > c and a == c)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 a_list = [1 , 2 , 2 , 3 , 5 , 2 , 2 , 8 , 9 , 2 ] n = len (a_list) new_list = [] for i in range (0 , n): if a_list[i] == 2 : pass else : new_list.append(a_list[i]) print(a_list) print(new_list)
列表和元组的区别?(面试题)
1 2 3 4 5 6 7 ①列表和元组唯一的区别是:列表中的元素可以修改,但是元组中的元素不能修改。 ②理解元组的不可变(子元素不可改,若子元素是一个列表那么列表里面的内容可以改) # 元组的不可变指的是元组元素的id不可变。就是说一个元组包含了几个对象, # 然后不可以给这几个元组再添加或者删除其中的某个对象, # 也不可以将某个对象改成其他的对象。 # 但是,如果元组中的某个元素是可变对象(比如列表或字典),那么仍然可以修改。
Set(集合) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 a_set = {50 , 20 , 20 } print(a_set) value = {50 , 20 , 20 } a_set02 = set (value) print(a_set02) basket = {'apple' , 'orange' , 'apple' , 'pear' , 'orange' , 'banana' } print(basket) print('orange' in basket) print('crabgrass' in basket) a = set ('name' ) b = set ('username' ) print(a) print(b) print(a - b) print(a | b) print(a & b) print(a ^ b)
Dictionary(字典) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 a_dic = {'name' : 'poo-poo-cai' , 'age' : 21 } print(type (a_dic)) print(a_dic["name" ]) a_dic['name' ] = "蔡坨坨" print(a_dic["name" ]) a_dic["address" ] = "福建" print(a_dic["address" ]) del a_dic['address' ]print(a_dic) a_dic02 = {"username" : "007" , 7 : 8 } print(a_dic02) a_dic02.clear() print(a_dic02) a_dic03 = {"age" : 20 , "habits" : "play computer" } print(a_dic03) habits = a_dic03.pop("habits" ) print(a_dic03) print(habits) a_dic04 = {'name' : 'poo-poo-cai' , 'age' : 21 , "address" : "成都" } print(a_dic04.keys()) print(a_dic04.values()) print(a_dic04.items())
输入输出函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 name = input ('请输入你的姓名:' ) print('你的姓名是:' , name) num = input ('please input a number:' ) print('type:' , type (num), end="---" ) num2 = int (num) print('your number is:' , num2, 'type:' , type (num2))
注释 & 编码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a = 1.0 import sysprint(sys.getdefaultencoding())
运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 a = 1 b = 2 print(a + b) print(a - b) print(a * b) print(a / b) print(a % b) print(a // b) c = 3 print(c ** 3 ) print(2 < 3 ) print(2 > 3 ) print(2 == 3 ) print(2 >= 3 ) print(2 <= 3 ) print(2 != 3 ) 'test' == 'tester' 'test' != 'tester' 'a' < 'bb'
对象和变量引用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 a = 100 print(type (a), id (a), a) a = 200 print(type (a), id (a), a) b = a print(type (b), id (b), b) b = 300 print(type (b), id (b), b)
条件判断语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 if 2 > 3 : print('dei' ) if 2 > 3 : print('dei' ) else : print('bu dei' ) if 1 : print('非0' ) if '' : print('非0' ) else : print('空字符串' ) if []: print('非0' ) else : print('空列表' ) if {}: print('非0' ) else : print('空字典' ) x = int (input ("please input x's value:" )) y = int (input ("please input x's value:" )) if x > 0 : if y > 0 : print('x and y >0' ) else : print('y <= 0' ) else : print('x <= 0' )
循环语句 while循环语句:
1 2 3 4 5 n = 1 while n < 4 : print('这是我循环的第%d次' % n) n += 1
for循环语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 name = 'caituotuo' for n in name: print(n) lists = [1 , 1.5 , True , 5 + 10j , 'cai' , (1 , 2 , 3 )] for list in lists: print(list ) dicts = {'id' : 666 , 'name' : 'caituotuo' , 'sex' : 'boy' } for dict in dicts: print(dict ) for k in dicts.keys(): print(k) for v in dicts.values(): print(v, end=' ' ) print('\n' ) for k, v in dicts.items(): print(k, end=' ' ) print(v, end=' ' ) print('\n' ) for n in range (1 , 5 ): print(n)
常用内置函数/模块(abs、divmod、round、break、continue、pass):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 for n in range (1 , 100 ): if n % 3 == 0 : print(n) break for n in range (1 , 100 ): if n % 3 != 0 : continue print(n) break if 3 == 3 : pass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a = -20 print(abs (a)) a, b = divmod (10 , 3 ) print(a, b) r = round (1.66666 , 2 ) print(r)
使用for生成列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 s = [x ** 2 for x in range (4 )] print(s) e = [x for x in range (8 ) if x % 2 == 1 ] print(e)
自定义函数 & 不定长参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 def add (num=3 ): num = num + 1 return num num = add() print(num) num = add(5 ) print(num) def fun (x=1 ): y = x ** 3 z = y + x return x, y, z _, _, z = fun(2 ) print(z) def log (prefix, *data ): print(prefix + "\t" .join(data)) log('[Notice]' , "hello" , "world" ) def bdc (*canshu ): print(canshu) bdc(1 , 1.5 , True , 'hello' ) def chengdu (**kv ): print(kv) chengdu(name='cai' , age=21 )
作用域 & 文档字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 for i in range (3 ): print(i) print(i) def fun (**kv ): """全局变量""" global new_kv new_kv = kv return kv kv = fun(name='cai' , age=21 ) print(kv) print(new_kv) def fun (): """文档字符串""" print(fun.__doc__) help (fun)
文件操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 handle = open ('test.txt' , 'r' , encoding='utf-8' ) for line in handle: print(line.strip()) handle.close() print(handle.read(3 )) print(handle.readline()) result = handle.readlines() print(result[0 ].strip()) handle.close()
异常 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 list01 = [1 , 2 , 3 ] try : print(list01[2 ]) handle = open (r'test02.txt' , 'r' , encoding='utf-8' ) except Exception as error: print(error) print(type (error)) if str (error) == 'list index out of range' : print('IndexError' ) elif str (error) == "[Errno 2] No such file or directory: 'test02.txt'" : print('FileNotFoundError' ) print('成功捕获异常' )
模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 def bubble_sort (ls ): n = len (ls) for i in range (n - 1 ): for j in range (0 , n - i - 1 ): if ls[j] > ls[j + 1 ]: ls[j], ls[j + 1 ] = ls[j + 1 ], ls[j] print(ls)
1 2 3 4 5 6 7 from c_bcbx.Python基础.模块.test01 import bubble_sort as bb([2 , 3 , 5 , 22 , 2 , 1 , 99 , 0 , 2 ])
注意事项:
.py文件的命名可以使用数字、字母、下划线。
当文件作为主程序运行时,文件名开头可以随意,以数字,字母,下划线开始都可以,如:666_cai.py,cai.py,_cai666.py,cai1.py,_666cai.py;
但是,当.py文件作为模块被导入到其他文件中调用时,则作为模块的.py文件不能以数字开头命名,可以用下划线和字母开头,如:cai.py,_cai666.py,cai666.py,_666cai.py,若命名为666cai.py则会出错。
同理,若作为模块的.py文件位于某个包下,则这个包的命名也不能以数字开头。
包 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 from c_bcbx.Python基础.包.bao_package import add, divideadd divide
类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 class Tester : def __init__ (self, house_type ): self.house_type = house_type developer = 'SOHO' def show_price (self, s ): if self.house_type == '洋房' : print('单价30000/每平米' ) print('整套的价格是:%d' % (30000 * s)) elif self.house_type == '小高层' : print('单价25000/每平米' ) else : print('单价20000/每平米' ) cai = Tester('洋房' ) cai.show_price(100 ) cai.house_type == '小高层'