Table of Contents
1. ord(字符串):返回该字符串的Unicode码。
2. chr(Unicode码):返回对应的字符串。
列表赋值
列表赋值赋的是地址,如果想要复制元素,需要用深拷贝
运算符:
算数运算符,增强运算符,比较运算符,逻辑运算符,身份运算符,
优先级
算数运算符>比较运算符>增强运算符>逻辑运算符
小括号最高
if条件表达式
变量 = 满足条件的结果 if 条件 else 不满足条件的结果
容器的数学运算
+:拼接两个容器
*:重复生成容器元素
+=:用原容器与右侧容器拼接,并重新绑定变量
*=:用原容器生成重复元素,并重新绑定变量
<> >= <=== !=:依次比较两个容器中元素,一但不同则返回结果。
字符串拼接
将多个字符串拼接为一个。
result = "连接符".join(列表)
将一个字符串拆分为多个。
列表 = “a-b-c-d”.split(“分隔符”)
推导式语法:
变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]
元组
建议变量数据固定时使用元组,因为通常占用空间小。
函数
需要记得定义函数之后,需要调用
参数传递:
实参
1.位置传参
2.序列传参,用*list()
2.关键字传参,key=value
3.字典传参:**{key1:value,key2,value2}
形参
默认参数:(参数=默认值)
位置形参:(参数1,参数2)
星号元祖:(*args)
命名关键字:(*args,参数名)
双星号字典形参(**kwargs)
可变不可变类型
1. 不可变类型:
字符串、元组、固定集合、整数、浮点数、复数
2. 可变类型:
列表、字典、集合
变量名查找规则
由内到外
Local ---> Enclosing ---> Globe ---> Builtins
面向对象
实例成员/实例方法
成员用self.,方法第一个参数是隐式参数self
类变量/类方法
定义在方法外的变量,用classmethod修饰的方法(第一个参数是类对象 隐式参数cls)
静态方法
用staticmethod修饰的方法,可以直接类名调用,不需要任何隐式参数
封装:
数据类型:
将多个数据类型,合成一个
比如1.8,28 :可以代表身高,年龄
行为角度:
对外只提供功能,功能的细节不需要展示
比如吃饭,不需要展示怎么做饭,怎么选菜
设计角度
分而治之,封装变化,高内聚,低耦合
分而治之:一个大功能,拆分成多个小功能来实现
封装变化:让变化点易于修改
低耦合:类中的方法,都完成一个任务
高内聚:类与类的关联性低(泛化,关联,依赖)
私有成员
使用双下滑线开头,在python中就是私有成员变量
__slot__
限定一个类,只能有固定的实例变量
__slots__ = (“变量名1”,”变量名2”…..)
优点:访止用户因错写属性的名称而发生程序错误。
缺点:丧失了动态语言可以在运行时为对象添加变量的灵活性。
属性property
-- 通常两个公开的属性,保护一个私有的变量。
-- @property 负责读取,@属性名.setter 负责写入
-- 只写:属性名= property(None, 写入方法名)
多继承
一个类,有多个父类,那么找同名方法的顺序是从自身找,从继承父类左到右,在到上层父类(MRO Method
Resolution Order)
Resolution Order)
继承
1. 重用现有类的功能与概念,并在此基础上进行扩展。
2. 说明:
-- 父类有的子类都有,还可以添加父类没有。
-- 事物具有一定的层次、渊源,继承可以统一概念。
例如:公司组织架构 大的范围都是员工,然后细分可以有销售,行政,研发,策划
优点:层次化的管理类,比如调用父的抽象,执行子的具体(多态)
缺点:耦合度高(父类一修改,子类也全部被修改)
from import *
模块中以下划线(_)开头的属性,不会被导入,通常称这些成员为隐藏成员。
模块变量
__all__变量:定义可导出成员,仅对from xx import *语句有效。
__file__变量,模块对应的文件路径名
异常的现象:
当异常发生时,程序不会再向下执行,而转到函数的调用语句。
常见异常类型:
-- 名称异常(NameError):变量未定义。
-- 类型异常(TypeError):不同类型数据进行运算。
-- 索引异常(IndexError):超出索引范围。
-- 属性异常(AttributeError):对象没有对应名称的属性。
-- 键异常(KeyError):没有对应名称的键。
-- 为实现异常(NotImplementedError):尚未实现的方法。
-- 异常基类Exception。
异常语法:
try except else finally
可以将程序转换为正常流程
raise 语句
作用:抛出一个错误,让程序进入异常状态。
目的:在程序调用层数较深时,向主调函数传递错误信息要层层return 比较麻烦,所以人为抛出异常,可以直接传递错误信息。。
自定义异常
继承:继承Exception,后缀规范是Error,实现__init__函数
调用方法:raise 自定义异常名称(参数)
迭代
可迭代对象 iterable
具有__iter__函数的对象,没有元素会抛出StopIteration异常
迭代器对象 iterator
具有__next__方法,可以被next()调用
生成器函数 yield
含有yield的函数,
优点:节省内存,用一次,拿一次
函数式编程
就是让函数做参数传递,将变化点封装为函数
lambda表达式
语法 变量 = lambda 形参:方法体,参数(形参和参数可以省略)
内置高阶函数
1. map(函数,可迭代对象):使用可迭代对象中的每个元素调用函数,将返回值作为新可迭代对象元素;返回值为新可迭代对象。
2. filter(函数,可迭代对象):根据条件筛选可迭代对象中的元素,返回值为新可迭代对象。
3. sorted(可迭代对象,key = 函数,reverse = bool值):排序,返回值为排序结果。
4. max(可迭代对象,key = 函数):根据函数获取可迭代对象的最大值。
5. min(可迭代对象,key = 函数):根据函数获取可迭代对象的最小值。
闭包
1. 三要素:
-- 必须有一个内嵌函数。
-- 内嵌函数必须引用外部函数中变量。
-- 外部函数返回值必须是内嵌函数。
2. 语法
-- 定义:
def 外部函数名(参数):
外部变量
def 内部函数名(参数):
使用外部变量
return 内部函数名
-- 调用:
变量 = 外部函数名(参数)
变量(参数)
3. 定义:在一个函数内部的函数,同时内部函数又引用了外部函数的变量。
4. 本质:闭包是将内部函数和外部函数的执行环境绑定在一起的对象。
5. 优点:内部函数可以使用外部变量。
6. 缺点:外部变量一直存在于内存中,不会在调用结束后释放,占用内存。
7. 作用:实现python装饰器。
函数装饰器
1. 定义:在不改变原函数的调用以及内部代码情况下,为其添加新功能的函数。
2. 语法
def 函数装饰器名称(func):
def 内嵌函数(*args, **kwargs):
需要添加的新功能
return func(*args, **kwargs)
return wrapper
@ 函数装饰器名称
def 原函数名称(参数):
函数体
原函数(参数)
3. 本质:使用“@函数装饰器名称”修饰原函数,等同于创建与原函数名称相同的变量,关联内嵌函数;故调用原函数时执行内嵌函数。
原函数名称 = 函数装饰器名称(原函数名称)
4. 装饰器链:
一个函数可以被多个装饰器修饰,执行顺序为从近到远。
python切片 step为负数 [start:stop:step]
当step为负数时,切片将其解释为从start出发以步长|step|逆序索引序列,此时,start和stop的截断依然遵循前述规则,但缺省发生一点变化,因为我们说过,在缺省的情况下,Python的行为是尽可能取最大区间,此时访问是逆序的,start应尽量取大,stop应尽量取小,才能保证区间最大,因此: