python
引号贯穿语法的使用和作用
赋值,名字=对象,为对象开辟空间,而名字不开辟,是命名空间中的引用,把名字绑定到对象相当于把标签贴对象上
缩进
函数必须调用才会执行
函数调用必须加()
索引
可迭代对象
:是语法的结束和缩进的开始
.表示从对象中取成员
单行注释
多行注释
ctrl+tap快速缩进
ctrl+/是开或关快速单行注释
变量
print()函数的sep参数可以实现的效果
print()有输出时有无引号的区别,单双三引号的区别
同一个变量可以被反复赋并且可以是不同的数据类型标识符被包含在()内对标识符本身没有影响
type()函数
range()函数
bool类型True和False严格大写并可当整形对待格式化输出
占位符数字设置位数,表示输出的整数显示位数,不足的话可以用什么代替,超出当前位数原样输出
%f数字设置小数位数,遵循四舍五入原则
%.f默认显示7位小数
%%占位符及print()里的使用
f“{表达式}”
除运算符,商是浮点型
取整除运算符,结果取商的整数部分,向下取整
有浮点数参与的运算,结果用浮点数表示
赋值运算符符必须连着写,不能有空格
input()输入函数,()里的内容是在控制台显示的提示(prompt)默认字符串类型
r原生字符串,默认取消转义
比较,逻辑,三目运算符使用格式
if搭配:
if-else,if-elif,if-elif-else,在else后不跟条件,可以有执行语句
if嵌套
缩进决定代码执行范围
while/for循环嵌套,for…in…循环格式
可迭代对象就是要去遍历取值的整体
range()函数,包前不包后,左闭右开
f-string语法
while循环内,在执行continue之前记得修改计数器
字符串编码的编码encode()和解码decode()
字符串运算符类型及使用
成员运算符in和not in检查字符串是否包含了某个子字符串
字符串名[下标值],下标不要超范围
切片对操作对象截取一部分[开始位置:结束位置:步长],包前不包后
步长绝对值决定切取间隔,正负决定切取方向,不写步长默认左往右(正号),右往左(负号)
字符串的查找,判断,修改字
符串的查找find,(子字符串,起始下标,结束下标) 包前不包后,无果返回-1,而index无果报错,count()会返回子字符串出现的次数,不出现返回0
字符串的判断的startswith,判断是否以某个字符串作为开头,是返回True,否返回False,endswith是判断是否为结尾,isupper判断是否为大写
字符串的修改的replace(旧内容,新内容,替换次数) split指定分隔符来切字符串,capitalize()第一个字符大写,其余小写,lower()大写字母转为小写,upper()小写转大写
列表=[元素1,元素2…] 元素都在括号内,用逗号隔开,列表是可迭代对象
列表添加元素中,列表名.append(变量)整体添加,extend()分散添加,逐一加进列表,()内要为可迭代对象,insert()指定位置插入元素,若位置有元素,原元素后移,()内先写位置跟逗号接着要添加的元素列表直接通过下标修改元素,格式为列表名[下标]=变量列表使用in通过指定位置查询元素,存在返回True,不存在返回False, not in反之
index返回指定数据所在位置的下标,不存在就报错,count统计指定数据在当前列表出现的次数列表可用格式del 列表名全部删除,del 列表名[下标]部分删除,可用列表名.pop(下标)删除指定下标的数据,不指定时默认删除最后一个元素,列表名.remove(元素的值)根据元素的值进行删除,且默认删除最开始出现的指定元素
列表名.sort()排序将列表按照特定顺序重新排列,默认从小到大,reverse()按照倒序
列表推导式,格式[表达式for临时变量in列表名]空列表加进元素的多种方式
[表达式for临时变量in列表名if条件],能求值得值的就是表达式
列表嵌套
取出嵌套列表的元素
元组格式,元组名=(元素1,元素2…) 元素之间逗号隔开,元素可为不同数据类型,若元组内只有一个元素要写逗号
元组只查看不修改,len()返回这个对象的元素个数字典格式为字典名={键名1:值名1,键名2:值名2,键名3:值名3…} 元素以键值对存在,键值之间:隔开,键值对之间逗号隔开
键具有唯一性相当于下标,值可重复,所以键名重复时后边键名的值覆盖前面
字典查看元素格式,变量名[键名],键名不存在时会报错,另种格式,变量名.get(键名) 键名不存在时默认返回None,也可返回自己设置的默认值
字典通过键名修改,格式为变量名[键名]=值,键名存在就修改,不存在则新增
字典删除时,格式del字典名,会删除整个字典,格式del字典名[键名] 删除指定键值对,不存在键名时均报错
字典名.clear()清空整个字典里的元素,置为空字典,字典名.pop(键名)删除指定键值对
字典len()求长度,字典名.keys()返回字典里包含的所有键名,字典名.values()返回字典里包含的所有值,item()以元组形式返回字典里包含的所有键值对
集合格式,集合名={元素1,元素2…}集合是无序的,里边的元素具有唯一性,集合会自动去重
空集合定义
集合无序性因每次运行时hash值在hash表中的位置不同而变动,整型hash值就是它本身,在hash表中位置不变集合名.add(要添加元素) 一次只添加一个元素,update把传入的元素拆分,一个个加进集合,传入元素要为可迭代对象
集合名.remove(要删除的元素),删除原集合没有的元素会报错,pop()对集合无序排列后默认删除根据hash表排序的第一个元素,discard选择要删除的元素,有则删,无则不响应
交集&并集|
强制类型转换的时机和使用
float转int去掉小数点后部分,str转int只转换由数字与前置正负号组成的字符串
int转float自动添加一位小数,任何类型都可以转换为str,float转str时会去除末位为0的小数部分并保留一位小数,eval()执行运算并返回表达式的值,运算要为有逻辑结果的表达式,eval可实现dict,list,tuple和str的转换
list()将可迭代对象转换成列表,字典转列表会取键名作为列表的值,集合转列表先去重再转换
id()查看内存地址
深浅拷贝中,赋值相当于完全共享数据,同一个内存地址,会共同变化,浅拷贝是数据半共享,创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址,即外层地址不同,嵌套层地址相同,格式为新对象=copy.copy(被拷贝对象) 深拷贝是数据完全不共享,格式为新对象=copy.deepcopy(被拷贝对象)
可变对象是变量对应值可修变,但地址不变,不可变对象是变量对应值不能被修改,如修改就会生成一个新的值从而分配新的内存空间
定义函数,格式为def 函数名():
函数体
调用函数,格式为
函数名()
函数运行几次就调用几次,每次从头执行
return会给函数执行者一个返回值,表示此函数结束,return以元组的方式返回多个值,无返回值返回None形参是定义函数时()里的变量,实参是调用函数时()里具体的值
函数参数里必备参数,也称位置参数,其传递和定义参数的顺序及个数必须一致
默认参数调用时可不传该默认参数的值,定义和调用时所有位置参数必须放在默认参数前,执行时有传递按传递,无传递按默认
可变参数格式为def 函数名(*参数):
传入值的数量可以改变,可以传多个或不传,以元组的形式接收
关键字参数格式为,def 函数名 (**参数)
以字典的形式接收,传值时需采用键=值的形式
函数嵌套
嵌套定义就是在一个函数里调用另一个函数,定义与调用是同级的,注意缩进,调用如果在定义里则调用不到
嵌套调用就是在一个函数里调用另一个函数
作用域指变量生效的范围,分全局与局部,全局是函数外部定义的变量,在整个文件中都有效,使用变量会先从内部找,有就直接使用,没有就滑向外层,局部变量只在函数定义的开始到结束有效
global()将变量声明全局变量,格式为global变量名 ,nonlocal用来声明外层的局部变量,只能在嵌套函数中使用,在外部函数先进行声明,内部函数进行nonlocal声明,只对上一层进行修改
匿名函数格式为
函数名=lambda 形参: 返回值的表达式
调用为结果=函数名(实参)
lambda的参数形式
内置函数
abs()返回绝对值,sum()求和,min()求最小,max()求最大,zip()将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,若元素个数不一致,按照长度最短的返回,map()让可迭代对象的每一个元素进行映射,分别去执行,也就是对象中的每一个元素都会去执行这个函数
reduce(函数,序列) 函数必须是有两个参数的函数,序列为可迭代对象,先把对象中的两个元素取出,计算出一个值然后保存着,接下来把这个计算值跟第三个元素进行计算
map结合for循环与list转换
key为每个元素生成一个用来排序的值
拆包是对于函数中的多个返回数据,去掉元组,列表,或者字典,直接获取里边的数据
异常
创建一个Exception(异常提示信息)对象
raise抛出这个对象,raise以后不执行抛出异常与捕获
捕获异常为了检测到异常后继续执行,不终止程序,try…except
模块本质是.py文件,内置模块,第三方模块,自定义模块
import模块名导入模块,模块名.功能名调用模块,使用模块里的函数和变量须加前缀模块名.
from模块名import功能名:在使用模块里的函数和变量不加前缀
导入模块时程序自动执行,无需调用
模块as起别名,import模块名as别名as功能起别名,from模块名import功能名 as 别名,多个功能间逗号隔开,都可取别名
当模块内的内容不想被外部访问时可采用内置全局变量,用来控制py文件在不同的应用场景执行不同的逻辑, 文件直接自己执行自己即if __name__ == "__main__"
main()会调用 ,文件作为导入时即if __name__ != "__main__" main()不会调用
包就是含有__init__.py的项目结构中的文件夹/目录,目的是将有联系的模块放到同一个文件夹下
包的创建方式导包方式
import导入包时,先执行__init__.py里的代码,__al__本质是列表,列表里的元素代表要导入的模块,控制要引入的东西
__all__只限制外部导入,不限制当前文件使用,如果模块里定义了 __all__ 列表,即 __all__ = ['模块名1', '模块名2'] ,则from模块名 import* 只导入列表中的名字, 无 __all__ 则默认导入所有不以单下划线 _ 开头的名字,为了保护变量/内部函数不会被导入
包的嵌套
递归函数
闭包是嵌套函数中内部函数使用外部函数的局部变量并且外部函数把内部函数名作为返回值,返回内部函数的内存地址,外部函数执行后变量未销毁而是被内部函数绑定所包住调用内部函数的方法
给内外函数传参的闭包
函数引用,通过引用调用函数,函数名里面保存了函数所在位置的引用,id()判断两个变量是否是同一个值的引用,内存地址变化,值也跟着变化
每次开启内函数都在使用同一份闭包变量
在原有函数上添加函数的功能
装饰器是将原有的函数名重新定义为以原函数为参数的闭包函数
标准版与语法糖
let的作用
装饰器的参数一致多个装饰器中,无论装饰器叠多少层,只有“最贴近原函数的那一层装饰器”能直接拿到原函数的参数,外层的每一层装饰器,拿到的都只是“上一层返回的函数对象”




