python高级 复习: 在python中缩进的含义: 缩进后的代码就是缩进前的最后一行代码的字代码 变量: 就是一个字母或者单词 ,可以临时存储任意类型的数据 不能以数字开头,可以以数字结尾 数据类型: 整型: int 浮点数:float 布尔值: True False 字符串:str 列表: list 特性:可以存储任意类型的数据,可以进行增删改查,通过索引操作 增: append('4') #在列表的末尾插入一条数据 insert(indx,valu) #需要传入插入的位置和插入的数据 删除: pop() #取出元素 remove('4') #删除列表中的'4'这个值的元素 del(list[0]) #删除列表list中的第0号元素 改: list[0] = 'aaa' #将列表list中的第0号元素的值修改为'aaa' 查: list[0] #获取列表中的第0号元素 切片操作: b = [1,2,3,4,5] print(b[:3]) #从0号元素开始到3号元素停止,不包含索引为3的元素 print(b[3:]) #从某个索引开始然后取完 print(b[1:3]) #从索引为1的元素开始到索引为3的元素结束,不包含索引为3的元素 print(b[0:5:2]) #间隔切片,2为没隔两个元素取一次 元组:tuple () 特性:不修改,可以通过索引获取数据 定义元组的时候如果元组的元素只有一个,需要加一个’,‘逗号 元组可以通过切片获取元素 tp2 = ((1,2),(3,4)) #二维元组 字典:dict {} 特性:数据以键值对的方式存储,可以存储任意类型的数据字典的值),键不能为可变类型,字典可以任意修改内容,无序 增: dict['键'] = '值' 删: del(dc['a']) #用键删除数据 dc.pop('键') #通过键取出字典dc中的值 改: dc['a'] = 111 #通过键直接赋值的方式修改字典中的数据 查: 通过键查数据 dc['a'] #获取字典中键为a的值 获取字典中的所有键:dc.keys() #获取的键不能直接用,需要先转成列表的格式然后再使用 获取字典中所有的值:dc.values() #获取的值不能直接用,需要先转成列表的格式然后再使用 集合:set {} 特性:可以存储任意类型的数据,无序,不可重复,可以更改集合里面的内容 #由于集合的不可重复特性,经常使用集合来排重 增: add() #在集合中添加一个元素 s.update( x ) #在集合中添加元素,元素的值可以是列表,元组,字典等 删: pop() #从集合中取出一个元素 s.discard('d') #删除集合中的指定元素,如果元素不存在也不报错 s.remove() #移除指定元素,如果元素不存在会报错 改: 改不了 查: 只能查整个集合 if 判断: if 条件1: 达到条件1了之后的操作 elif 条件2: #当条件1不满足的时候执行这个条件2 达到条件2之后的操作 elif 条件3: #当条件1和条件2都不满足的时候执行这个条件3 达到条件3之后的操作 else: 以上所有条件都不满足的时候执行 循环: for 循环: for i in '可迭代对象': 每次循环需要做的操作 while循环: 根据条件来循环,如果条件成立就会一直循环下去 终止循环: 1.使条件不满足 在循环的过程中改变某些值使条件不满足 2.主动终止 1.直接跳出循环 break 2.只停止当前循环 continue while True: a+=1 print('第'+str(a) +'次循环!') if a<5: continue print('continue 之后的动作') if a>10: break 字符串格式化: #字符串格式 %s #整型格式 %d #浮点数格式 %f --可以指定小数位 %.nf #浮点数保留n位小数,本身如果不足n位小数就用0代替 #不区分数据格式的占位符 {} 然后.format(变量) 传值 a = 5 b = 6 c = 14.47 d = 'aaaa' bb = {'a':1,'b':2} print('a的值是%d这个数字,b的值是%d,c的值是%.2f'%(a,b,c)) print('bb的值是{}'.format(bb)) 双for循环应用: 1.九九乘法表 for i in range(1,10): print('\n') #这个输出是为了换行 for j in range(1,i+1): print('{}*{}={} '.format(j,i,i*j),end='') 2.冒泡排序 规则: 每次拿一个数对比: 如果后面一个数比当前数小,当前数和后面的数换位 如果后面的数比当前的数大,当前数不动,大的数继续往后面对比 一直将所有的数都对比完 已经排好了的数就不再继续对比 然后不停的循环这个操作一直到所有的数都从小到大排好顺序 函数: 就是一些自定义的代码块,可以根据你的输入产生对应的输出或者是做一些特定的操作 内置函数: 1.数据类型: int() #转换成整数 float() #转换成浮点数 complex() #创建一个复数 str() #转换成字符串 tuple() #转换成元组 set() #转换成集合 list() #转换成列表 dcit() #转换成字典 2.进制转换: bin() #转2进制 oct() #转8进制 hex() #转成16进制 int(var,n) #n进制转换成10进制 3.数学运算: sum() #求和 min() #最小值 max() #最大值 pow(a,b) #求a的b次幂 abs() #求绝对值 divmod() #返回商和余数 round(num,n) #将num四舍五入精确到n位 len() #求长度 4.输入和输出 print() #打印 input() #用户输入内容 id() #查询对象的内存地址 变量 --给数据所在内存地址添加标签 列表,字典,集合 是可变量,id值不会随着数据的变化而变化 del() #删除变量 globals() #显示系统全局变量 __变量名__ :系统变量,不用自己去设置 reverse() #用于反转列表中元素 用法 list(reverse(a)) list中有单独的reverse方法 排序: sorted() #排序 reverse 调整正序还是反序 list.sort() #只能用来对列表排序sort() 中可以传reverse参数来决定是升序还是降序排 reverse=True ---降序,默认是升序 sorted() #适用于所有数据类型 降序 list.sort(reverse=True) sorted(reverse=True) 升序 默认就是升序 大小写转换: str.upper() #所有字母转大写 str.lower() #所有字母转小写 str.capitalize() #首字母转大写 str.title() #所有单词的首字母转大写 判断: isupper() str.islower() str.istitle() 判断是否为数字 str.isdigit() isalnum() #判断字符中是否只包含由数字或者字母 ---通常使用该方法判断字符串中是否含有特殊字符 判断是否为浮点数 type(浮点数) 自定义函数: 概念:自己定义一个方法,专门去执行自己想要的动作,或者将某些数据进行处理,可以重复调用,并且可以根据你传入的数据返回对应的结果 创建自定义函数: def 函数名(): 需要执行的代码块 为什么需要自定义函数: 可以避免重复造轮子,提升工作效率,提升代码效率 如果有很多地方都需要做重复的动作,那这个时候就可以将这个需要执行的动作使用函数封装起来,需要使用的时候直接调用就行 局部变量和全局变量: 全局变量:整个文件中都生效的变量 局部变量:只对某一区域生效的变量 比如在函数中定义变量就只在当前函数中生效 局部变量也可以设置成全局变量 ---global 变量名 #通过global 函数可以将局部变量设置为全局变量 在函数中的局部变量就算设置为全局变量后也不能直接就使用,需要先调用函数才会将该函数中的变量创建 #例题: 1.定义一个函数,传入两个参数,返回两个参数的和 2.定义一个函数,传入姓名,省,市,县/区,组成地址 3.定义一个函数,传入两个参数,判断两个参数的大小 传参方式: 1. 实参 ---必须要传的参数 def add(a,b): #使用函数add的时候 必须要传参数 a和参数b 不传就会报错 c = a+b 使用时,传参和函数内的参数值变量的位置是一一对应 2. 形参 ---非必传参数 --在定义函数的时候会给参数一个默认值 def add_1(a=2,b=2): #使用函数add_1的使用,可以不用传参数,当不传参数的时候就是使用a和b参数的默认值,传参数的时候会将默认值覆盖掉 c = a+b 3.关键字传参: 使用参数的关键字然后赋值 def add(a,b): c = a+b 传参方式1: add(参数1,参数2) #这种方式传参,参数的顺序是固定,和创建函数时的关键字位置一一对应 传参方式2: add(a=参数1,b=参数2) #这种方式传参就是关键字传参--这种方式传参 参数的顺序可以更改 4.不定长传参: 在创建函数的时候 参数变量名前面加一个*号,则这个传参就可以传任意数量的参数 def address(*ads): #使用时,可以更加需要选择传一个还是多个参数 print(ads) 以键值对的方式传参: 在创建函数的时候 参数变量名前面加两个*号,则这个传参就可以以键值对的方式传参,可以传任意数量的参数 使用方式 :键=值的方式传入 def address(**ads): #使用时,可以更加需要选择传一个还是多个参数 print(ads) 传参的类型: 所有类型的数据都可以作为参数传递 可以将值用变量存储起来,然后使用变量名传参 函数也可以做参数传递 匿名函数: lambda x:x+1 等同于: # def a1(x): # b = x+1 # return b 函数的调用: 正常的调用:函数名() #--只有加了括号 函数才会被调用,否则不会调用 函数可以调用函数 函数可以自己调用自己 ---这种函数叫做递归函数 #编辑器常识: 1. 批量注释/取消注释代码 ---ctrl + / 2. 查看某个方法或者函数的源代码 ---安装ctrl 然后将鼠标移动到 需要查看的方法名称上,然后鼠标左键点击 3.缩进: 批量缩进:选中要缩进的代码 然后按tab键 批量反向缩进:选中要反向缩进的代码 然后同时按shift键 + tab键 例题:小项目 账号登陆、注册、修改密码系统 1.用字典保存账号密码 2.用函数定义各个模块 3.通过模块调用使用功能 类和面向对象: 创建一个类: class 类名: #备注:类名的所有单词的首字母需要大写 ---这个规则不是强制 类中执行的操作 类中可以有变量和函数: 类中的变量叫做类的属性 ---通过self标记 类中的函数叫做类的方法 ---通过self标记 实例化对象 变量 = 类名() #用变量将类的调用存起来的过程就是类的实例化 调用类中的方法: 1.直接调用 类名().方法名() 2. 先实例化然后使用实例化的变量名去调用 tc = Test_Cxy009() #类的实例化 tc.a() 类中的 全局变量局部变量: 在类外面的变量 类中所有地方都可以用 ---整个文件的全局变量 在类里面,但是在类中的函数外面 ---是类的属性,所有的方法中都可以使用,但是需要加上self.的前缀 在类的方法中定义的变量: 直接定义的变量 ---只有当前方法中可用 定义变量的时候在变量的名字前面加上了self.前缀(代表是类的属性) ----整个类中的方法都可以使用 修改类的属性: 直接调用类的属性然后赋值 ----就可以直接修改类的属性 修改类的数据只是修改当前实例中的属性,而不会对原来创建的类有任何的改变 如果同时有多个实例化,他们之间是完全独立互不影响的 属性可以通过参数的方式传入 类的方法中可以传参,调用类的方法去传参 def a(self,bb): self.bb = bb #将方法中传入的参数转换成类的属性 print(bb) print(self.bb) 可以直接在实例化的时候传参: 使用 __init__方法 #每个类中只允许有一个__init__方法,这个方法比较特殊,不需要主动调用,会在类实例化的时候自动执行 #在这个方法中设置的参数,只能通过实例化的时候在类名(__init__方法的参数)中传递 类的继承与多态: class 子类类名(父类名): ---->类的继承 特性:子类继承父类后 拥有父类的一切方法和属性 重写类的方法 子类中定义一个和父类相同的名字的方法, -----这种操作就叫做重写父类的方法 子类重写父类的方法后 该重写的方法子在当前子类(或者子类的子类)中生效,不直接改变父类原有的方法 类的多态: 一个类可以拥有多个子类,并且多个子类都可以对父类的同一方法进行重写 ----这种特性就叫做类的多态 捕获异常: python的异常处理: try: 代码块 except 错误类型: 报错后需要做的动作 else: 代码块 #当代码没有错误的时候执行的操作 finally: 代码块 #不管代码是否报错都执行 错误类型: KeyError #键错误 IndexError #索引错误 NameError #变量名称未定义错误 AttributeError #属性错误 Exception #可以捕获所有类型的错误 #有两种错误不能捕获 1.语法错误不能捕获 2.缩进错误不能捕获 python的库: 实际也是一些.py文件,python自己没有实现的功能,其他人实现了,然后做成一个模块,其他人可以下载后使用(导入后使用) 操作数据库 1.安装第三方库 pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple 操作excel: 1.安装 xlrd 操作库 需要导入第三方库 xlrd pip install xlrd==1.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple #python专有的安装第三方库的方式 更新 pip 版本: python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple 查看当前已经安装了的第三方库: pip list 2. 使用 导入 xlrd import xlrd 3. 详细用法: 1. 打开要操作的excel文件 path = r'./test009.xlsx' e = xlrd.open_workbook(path) 2. 选定需要操作的表格 获取当前excel文件中所有表格的名字: st = e.sheet_names() #获取所有表格的名字 st_name = e.sheet_by_name('test001') #通过表格名字的方式选定表格 st_name = e.sheet_by_index(0) #通过索引的方式选定表格 3. 进行列操作 ncol = st_name.ncols #获取当前表格的有效列数 col_data = st_name.col_values(1) #返回第n列的所有内容(以0为第一列) 4.进行行操作 nrow = st_name.nrows #获取当前表格的有效行数 row_data1 = st_name.row_values(3) #获取第n行的内容 5.单元格操作 data1 = st_name.cell_value(2,1) #获取行索引为2,列索引为1的单元格信息 文件操作: file = open(path,','mode',encodein='utf-8') #path文件路径,mode打开文件方式,encodein文件编码格式 文件打开模式: “r”打开阅读(默认) “w”打开进行写入,首先截断文件 “x”创建一个新文件并打开它进行写入 “a”打开进行写入,如果文件存在,则附加到文件末尾 “b”二进制模式 二进制模式不能直接使用,需要配合其他方式使用 “t”文本模式(默认) 读取文件内容: file.read() 写入文件内容: file.write('要写入的内容') 每次打开文件后需要关闭: file.close() 自动关闭文件(with方法会在合适的时候自动关闭文件,不需要每次手动关闭) with open(path,'w') as file: json模块 os模块 正则表达式模块