前言:更详细学习python可参考:菜鸟教程
一、编程语言简介
1、编程语言分类:
面向对象(一类只定义一个对象):java、c++、C#、python、ruby 面向过程(用到什么定义什么):汇编语言、C、机器语言 面向对象跨平台语言:python、java、c++
跨平台:在不同操作系统写的代码能在不同的操作系统下运行
2、做测试为什么要学python?
python+selenium:web(b/s)功能自动化 python+appium:APP自动化 ruby+cucumber:
3、python有2个大版本:
Python 2.0 于 2000 年 10 月 16 日发布,增加了实现完整的垃圾回收,并且支持 Unicode。
Python 3.0 于 2008 年 12 月 3 日发布,此版不完全兼容之前的 Python 源代码。不过,很多新特性后来也被移植到旧的Python 2.6/2.7版本。
Python 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。
Python 2.7 被确定为最后一个 Python 2.x 版本,它除了支持 Python 2.x 语法外,还支持部分 Python 3.1 语法。 本次学习用3.4版本,因为现在很多公司还在使用WinXP系统(占用资源少),而windowXP系统最高只支持python3.4.
4、安装python3.4
1、必须安装在默认路径下(否则后续使用容易出现问题) 2、配置环境变量: 计算机(右键属性)–高级系统设置–高级–环境变量–系统变量–双击path —编辑文本–光标移到最前边-输入C:\Python34\Scripts;(默认安装路径时)–光标在挪到最前边-输入C:\Python34;–保存退出 3、在cmd下输入python,出现版本号即为安装成功
5、第一个 Python 程序
交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码。 Window 上在安装 Python 时已经安装了交互式编程客户端,提示窗口如下:
新建一个TXT文件,改名为.py文件 ; 右键打开方式:Edit with IDLE; 输入:hello world ;F5键运行,即可有上图效果
二、python基本规则
1、文件类型:.py 一个py文件是一个module模块,每次运行是运行整个文件; 2、不支持非英文字符,并严格区分大小写; 3、以行区分语句,一行为一条语句 4、多条语句写在一行需用英文输入法的分号; 分隔开两条语句 5、一条语句写多行,在行尾敲续行符\ 6、print(“”) 打印内容到运行窗口,默认一行显示,多条print 语句需在一行显示时,在前一条语句最后加 ,end=”” 7、字符串需要用单引号(‘’ )或双引号(“” )或三引号(“”” ””” 或’’’ ‘’’ )引起来 8、注释分为单行注释:# 与 多行注释:””” “”” 或 ‘’’ ‘’’ (避免多行注释与三引号混用出错) 9、python实现跨平台的方式是文件首行输入:#!所跨平台的python路径 10、指定编码格式:#-*- coding:utf-8 -*- 或#coding=utf-8 11、所有代码顶格写,当python区分代码块时才 缩进
三、定义变量
定义变量的三种方式:
变量名=值 变量名1,变量名2,变量名3=值1,值2,值3 【变量个数与值个数必须一样】变量1=变量2=变量3=值
python不需要声明变量类型,但声明的时候必须带值 变量名可以由字母、数字、下划线组成(下划线开头有特殊意义,避开关键字) python定义变量类似于把内存中以有的内容与我们的变量名建立联系
四、数据类型
1、整形:int
2、浮点型:float
- 整形转浮点型,具体数值后加. 0
- 浮点型转整形 直接舍弃小数位
- 用
type() 可以返回数据类型
- 整形与浮点型 运算规则:
①int与int运算结果—int ②int与float运算—float ③float与float运算 —float
3、字符串:str
(1) 字符串表示:
用单引号(‘’) 或双引号(“”) 或三引号(“”” ””” 或’’’ ‘’’) 引起来
例:ss =”abcdefgh”
(2) 字符串切片
字符串切片也就是截取字符串,取子串。可通过索引返回索引位置上的元素。
- 索引:
索引有两种表示方式: 1、o 开始到len(变量名)-1 结束; 2、-len(变量名) 开始到-1 结束;
注: a. 字符串元素按不同方向取,同一个元素有两种索引表示方式 b. len(变量名):返回字符串的长度
-
截取单个字符:变量名[索引] -
连续截取字符:变量名[开始索引:结束索引]
- 如果省略开始索引,相当于从字符串开始处开始截取;如果省略结束索引(或超过最大索引),相当于截取到字符串的结束处。
- 例:ss[ :3] 、ss[ : ] 、ss[0: ]
- 非连续截取字符:
变量名[ 开始索引 : 结束索引 : 步长]
- 返回从开始到结束索引位置上的元素,走步长数取一个,开始索引对应元素取,结束索引对应元素不取
- 没有步长,步长是正数: 左 → 右截取: 左开始,右结束
- 步长为负数: 右 → 左截取: 右开始,左结束
【注:若步长的方向与索引的方向相反,则取不到字符或子串;若开始与结束索引留空,则以步长方向截取,并且结束索引位置可以取到】 体会:ss = "abcdefgh"时,s0 = ss[::-1],s1 = ss[0::-1],s2 = ss[-8::-1],s3 = ss[3:2:1],s4 = ss[0:7:-1]
(3) str与其他数字类型相互转换
str→int/float
str内容是int数字→int/float
str内容是float数字的→float
int/float→str
直接转即可 str(int/float)
所有数据类型都可以转换成字符串,完全转换(括号,逗号都转)
(4)str的运算
字符串的比较运算,比的是字符对应的ASCII码的大小,第一个字符一样的比第二个字符,…以此类推。 字符串的算术(复合)运算只支持+ 、+= (数字与字符串的运算)与* 、*= (字符串与字符串的运算) 字符串的,成员运算(in 、not in ),判断一个字符串是否是另一个字符串内连续的一部分,是就返回True,否则返回False
4、有序可编辑的列表:list
语法:变量名=[元素1,元素2,...] 特点:有序的可以编辑的列表 常用用法:以 list1=['aa', 'cc', 'dd', 'aa', 123, 'abc123'] 为例 list1[索引]=值 : 修改索引位置上的元素 list1.append("元素") :追加元素到list1末尾 list1.insert(索引,元素) :在指定的索引位置上插入元素 list1.remove("元素") :移除元素【当元素有重复,移除第一个】 list1.reverse() :元素位置反转 list1.sort() :元素从小到大排序【元素能比大小】 list1.sort(reverse=True) :元素从大到小排序【元素能比大小】 list1.sort(reverse=False) :元素从小到大排序,同list1.sort() 【元素能比大小】 max(list1) :返回最大元素【元素能比大小】 min(list1) :返回最小元素【元素能比大小】 del list1[索引] :移除截取到的所有元素,若索引为空则是,移除整个变量
5、元组:tuple
语法:变量名=(元素1,元素2,...) 特点:有序的不可编辑的列表 常用用法: 例: tt=('bb', 'ee', 'aa', 'ttt', 'asfs123') max(tt) :返回最大元素【元素能比大小】 min(tt) :返回最小元素【元素能比大小】
注:定义tuple只有一个元素:变量名=(元素,)
6、无序集合:set
语法:变量名={元素1,元素2,...} 特点:无序的集合,可以编辑,元素不能重复 常用用法:以ss={“tt”,“aa”,“bb”,123,435,“agc”}为例 ss.add(元素) :添加元素到ss ss.remove(元素) :移除元素 max(ss) :返回最大元素【元素能比大小】 min(ss) :返回最小元素【元素能比大小】
注:1、max()与min()只有元素能比大小的时候才能使用 2、 list、tuple与set相互转换:如,变量名2=list(变量名1)
7、 字典:dict
语法:变量名={"key1":"value1","key2":value2","key3":value3} 特点: 可以编辑,key不能是list,set类型 常用用法:以dd={"name":"zs","sex":"m","age":18} 为例 dd[key] :返回key对应的value dd[key]=value : 修改key对应的value,如果key不存在,新增一对key:value元素 del dd[key] :移除key:value元素 dd.keys() :返回所有key dd.values() :返回所有的value
注: 1、字典元素是由key:value组成的元素对, 2、key,value不能为null, 3、key不能重复,无序 4、dict不与其他类型相互转换,要么报错,要么无意义
8、布尔类型:bool
布尔类型只有2个值,True与False
bool类型与字符串str的相互转换:
bool---->str:
True--->"True"
False--->"False"
str---->bool:
""-------->False
非""------->True
bool类型与int,float的相互转换:
bool---->int,float:
True----->1, 1.0
False---->0, 0.0
int,float---->bool:
0,0.0----->False
非0, 非0.0------->True
五、运算符
算术运算符: + - * / % ** // 复合运算符:+= -= *= /= %= **= //=
注: / 【python3.0之后结果是float,两个整数的/运算也是float】 ** 幂运算符【5**3 等价于5*5*5 】 // 整除运算符【运算结果取整数部分,类型不变】
比较运算符:> < >= <= != ==
注: != 不等于 ; == 等于
逻辑运算符:and 、or 、not 【非】 身份运算符: is 、 is not
注:参考id(变量/常量)返回的存储位置,若返回位置一样,则is的结果就为 true,否则为 false
六、条件语句
获取键盘上的输入: input(“提示信息”)
if 判断:
.........满足判断条件执行的代码块
else:
..........不满足判断条件执行的代码块
if 判断1:
...........满足判断条件1执行的代码块
elif 判断2:
...........不满足判断条件1,满足判断2执行的代码块
else:
...........不满足所有判断条件执行的代码块
注: 条件语句可以嵌套,一般嵌套不超过4层,否则可读性就很差
七、循环语句
1、while循环
while循环语法:
while 判断:
..........满足判断条件执行的循环体
else:
..........不满足判断条件执行的代码块
循环体里可以: 1、continue:跳过循环体内continue后面的语句,执行下一次循环判断 2、 break:整个循环终止
应用while循环的例子:
a=1
count=0
while a<=100:
count+=a
a+=1
print(a,count)
if count>2000:
if count>3000:
break
print("aaaaa")
continue
print("bbbbb")
ss="sdfdfsdgdfgfhfghgjghjuyutyyrtyerteff"
i=0
while i<len(ss):
print(ss[i])
i+=1
a=1
while a<=10:
print(a)
a+=1
2、for循环
for循环语法:
for s in ss:
.....ss内有元素从未赋值给s时执行的循环体
else:
.....ss内没有元素从未赋值给s时执行的代码块
1、for循环次数为 ss内元素的个数,没有死循环 2、ss处通常写range(数字1,数字2) 【注:生成>=数字1 并且<数字2 的rang类型数据;可以当成(或转成)list类型用,数字1处未填的默认为0,数字可以是正整数也可以是负整数】 3、 for循环里也可以使用continue与break
八、字符串格式化与转义字符
- 字符串格式化
用法(通常是在print里用) “aaa%s aaaaaa%d aaaaaaaa%f aaa” % (“tt”,123,123.99) 例:print("%2d*%.2f=%2s"%(9,12.3,“ttt”)) %与字符间的数字若是整数 表示占位(默认占1位),若是.整数 表示保留几位小数(默认保留6位小数)
常用的有: %s : :受字符串 %d :接收为整数 %f : 默认接收为6位小数的float %e : 用科学计数法格式化浮点数
- 转义字符
需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符 常用的转移字符有
符号 | 含义 |
---|
\ (在行尾时) | 续行符 | \\ | 反斜杠符号 | \' | 单引号 | \" | 双引号 | \b | 退格(Backspace) | \f | 换页 | \n | 换行 | \t | 横向制表符 | \r | 回车 |
九、方法(函数)
def 方法名(参数) :
...方法体
方法名: 1、数字字母下滑线组成,数字不能开头, 2、下划线开头有特殊意义,避开关键字, 3、建议小写开头
- 参数
方法定义的是时候可以带参数也可以不带参数,若是定义的时候无参数,调用的时候也不要传参数。若定义的时候带参数有以下情况: 定义时,参数个数确定,且不带默认值,则定义了几个参数,调用时就必须传几个参数; 定义时,参数个数确定,部分参数有默认值,有默认值的参数(靠后写),调用时可以选择传值或者不传,传就是传的值,否则就是默认值; 定义时,参数带* 号,表示可接受N个参数,接收为tuple类型,调用时,接收的每个值都是tuple的元素;
注: (1)带* 号的参数一般不与带默认值的参数一起用,没意义。 (2)带* 号的参数一般不与带默认值的参数 靠后写
return 返回内容
注: (1)若定义方法时没有写return 语句,默认返回None (2)return标志方法的结束,写在后边内容将不会执行(python不报错,java会给报错)
- 调用 方法
在本文件内调用本文件的方法:方法名(参数值) 跨文件调用方法有两种写法:
导包:import 包1.包2.....文件名
调用:包1.包2.....文件名.方法名(参数)
导包:from 包1.包2.....文件名 import 方法名 【*:代替所有方法名】
调用:方法名(参数)
补充: 1、方法/函数不调用就不会执行 2、包名,文件名:遵守变量名的命名规则,避开同名 3、参数之间 逗号 隔开 4、导包快捷键(pycharm提供的功能):光标放在在调用 方法的() 前,按Ctrl +Alt +空格 键,可快捷导包 5、包(python package)与文件夹(directory)的区别:包里有_init_.py文件,而文件夹里没有;有些版本python不能跨文件夹调用,故一般文件夹里不放代码,可以放测试数据、报告 6、if __name__=="__main__": ........代码块 所在文件被直接运行时才会执行 此代码块;若是通过导入到其他文件,在其他文件中 不会运行
- 几个常用方法函数:
包: import time 方法: time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) 格式化输出日期 方法: time.sleep(n) :当前进程休眠 n秒
%Y: 4位年 %y: 2位年 %m: 月 %d:日 %H: 24小时制小时 %I: 12小时制小时 %M:分钟 %S: 秒
包: import calendar 方法: calendar.isleap(年) :判断年是否是闰年,如果是返回True,否则返回False
包: import random 方法: random.randint(数字1,数字2) :生成>=数字1 <=数字2 的整数的一个随机数
十、文件操作
- 打开文件:
变量名=open("文件名","打开方式") 以下以ff=open(“aa.txt”,w+)为例
打开方式有: w+: 如果文件不存在,新建一个写,如果存在,新建一个覆盖 a+: 如果文件不存在,新建一个写,如果存在,在原文件末尾追加(默认焦点在最后) r+: 如果文件不存在报错,如果存在,从前往后覆盖
-
修改文件内容: ff.write("写入内容") -
读取文件内容 ff.read(n) :读 n 个字符 ,结果为str类型【从当前焦点位置开始】 ff.read() :读所有字符 ,结果为str类型【从当前焦点位置开始】 ff.readline() : 读一行,结果为list类型【从当前焦点位置开始】 ff.readlines() : 读所有行,结果为list类型【从当前焦点位置开始】 -
关闭文件 ff.close()
注 1、ff.tell() : 返回当前焦点位置 2、ff.seek(数字) :焦点跳转到 数字 位置 3、 文件打开一次,只能读或者写,不能同时进行
十一、面向对象编程:类
1、相关概念
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 对象(object) /实例(instance):属于类的一个具体的个体 类变量:类的属性特征,类内定义的变量,这个类的所有对象都有 实例变量:属于类的某一个个体自己的属性特征
2、类的定义
class 类名 :
...变量【属性特征】
...方法【功能】
- 类名:
(1)数字字母下划线组成,数字不能开头,下划线开头有特殊意义, (2)避开关键字; (3)建议大写开头
下划线开头的特殊意义 : a. 类的属性或方法以 双下划线开头(表示私有的),有效范围在class内部,出了class边界,类对象,子类对象,都不能调用 b. 类名(或类外方法)以 下划线开头(表示受保护的),不建议跨文件包调用,且from …import * 时会出错。
3、调用
调用 构造方法 生成对象(生成对象的时候执行构造函数),通过 对象 调用类的方法 类 定义完不调用不会执行,类内方法,只能通过对象调用
- 构造方法 /构造函数:
(1)作用:构建对象,初始化对象,生成对象 (2)规则:方法名固定:__init__ ;有默认参数 self【也是当前类的对象】 (3)调用:类名() 【类名代替方法名执行】 (4)不能写return语句,默认 返回对象 (5)定义类时,如果没有定义构造方法,系统会默认创建一个空的构造方法
4、继承
class 子类名(父类1,父类2,....):
...........
- 继承原则
a. 构造方法的继承: 子类有用子类自己的;子类没有找父类的,第一个父类没有,就找第一个父类的父类,…,若也没有就找第二个父类的,…;所有的父类都没有,系统默认创建 b. 同名属性方法的继承: 子类有用子类自己的;子类没有找父类的,第一个父类没有,就找第一个父类的父类,…,若也没有就找第二个父类的,…;所有的父类都没有就会报错 - 3个常用方法
isinstance(对象1,类1) : 判断对象1 是否是 类1 的实例,如果是返回True,否则返回False issubclass(类1,类2) : 判断类1 是否是 类2 的子类,如果是返回True,否则返回False super(类1,对象1).父类的属性或方法(..) : 通过对象1调用 类1的父类 的属性或方法
4、重载(overload)
子类有父类同名的属性方法,方法名相同参数不同
- 重写overwrite /覆盖 override
子类有父类同名的属性方法,方法名相同参数也相同
十二、通过pymysql操作MySQL
- 首次操作需要安装python的库pymysql
在cmd下输入命令:pip install pymysql==0.10.0 即可在线自动安装 - 导包:
import pymysql - 链接数据库
conn=pymysql.connect(host="localhost",user="root",passwd="",db="testdb")
cursor=conn.cursor()
- 常用操作
数据库操作的命令都可写在:游标.execute()
cursor.execute("update hometown set city=\"广州\" where id= 666 ;")
aa=cursor.execute("select * from students;")
print(aa)
bb1=cursor.fetchone()
bb3=cursor.fetchmany(3)
bb4=cursor.fetchall()
注: 1、得先有查询的操作,才可用变量接收查询到的数据; 2、查询到的数据为元组类型,多条数据的每条数据为元组的一个元素 3、当没有查到数据或焦点位置在最后时,得到的是空元组
- 提交修改
conn.commit() # 提交sql语句执行结果【如果需要】 DML数据库语言才需要提交(insert、update、delete) - 关闭游标
cursor.close() - 关闭连接
conn.close()
|