以下为个人学习笔记整理
# python 内建函数
# build-in function
abs:求绝对值,复数返回大小
![image-20200919150037738]()
all:可迭代对象内是否存在空元素
![8d45522f17bbe1b7978c73af8f3cd1ee.png]()
any:可迭代对象内是否存在非空元素
![296d63f7ecea65e38c49820842b13479.png]()
ascii:转为 ascii 编码
![db917a03adea4060bbda11eaa3412af8.png]()
bin:转为二进制
![b8f45c0c4645ba1931d58e05d8656641.png]()
bool:转为 bool 类型
![b9fd468eb7ff3b3b30071ee3a6d39db8.png]()
breakpoint:打上断点,通过输入 n 键(Next)进行调试
![8fde50e9f620207a5f1224c879c15cb4.png]()
bytearray:字节数组(可变)
![930ad90e2480861e262fae21d08703f3.png]()
bytearray 和 bytes 不一样的地方在于,bytearray 是可变的。
和字符串一样,字节类型也是不可变序列,而字节数组是可变版本的字节,它们的关系就相当于 list 与 tuple。
由于和字符串一样是序列类型,字节和字节数组可用的方法基本上一致。
bytes:字节数组(不可变)
![aee08af1697372d08f5d747c13b48213.png]()
callable:是否可调用
![cc6148284c84a79065132b9f6cf4e7d5.png]()
chr:整数转字符
![6b0be29023048400ec2cdd4f25490ee4.png]()
classmethod:类方法
![54f2f74d5b738ec65d87ad47fbe9ea0b.png]()
compile:解析字符串为代码
![bcd5589ec5d62490ee26ba94db3b3e3a.png]()
complex:将字符串或数字转换为复数
![e94574370e07295500f908f22ad454ed.png]()
delattr:删除属性
![a02027717e03531f6037826144ae307e.png]()
dir:返回当前本地范围内的名称列表
![6b7b457ee191a1247c8144f427b3551d.png]()
divmod:取整除和求余
![dfba0380a3d2acfc0efeea464e28c763.png]()
enumerate:带下标的便利
![6080d381cd5df542d2f063cac018ed17.png]()
eval:执行字符串表达式
![95cb6d7984845654350a33f7393941cd.png]()
exec:执行字符串指令
![02375bd8aa3c851fe908d4da37a12d87.png]()
filter:过滤迭代器对象
![4d5059f28a9bb922b15e076c97a9026f.png]()
float:浮点数
![ce331033297d4f29f30f1923bff466c1.png]()
format:格式化输出
![245cd98878331aff7c44a8016df2b9e9.png]()
frozenset:不可变集合
![77b1d2872c01071ed339136218699458.png]()
getattr:获取对象属性
![9a8340505084a6f435479fdcaaa081ad.png]()
globals:全局符号表字典
![c2280ac9cdf8815a4c96ee02f6a908ef.png]()
hasattr:对象是否存在属性
![152576b21f46b582a7dacf3280dc91fb.png]()
hash:哈希
![23c28626a76b67b25983f9719151214e.png]()
hex:整数转 16 进制
![83d8dad9b82e2450cd970cb82b891dcc.png]()
id:获取唯一 id
![90a48444523965b94bffc8cbb771f0b2.png]()
input:输入
![2ae13e404c813a280ce0967c08bd33e9.png]()
int:整数
![a8498720a0fae0453b65b7dae7e05ad1.png]()
isinstance:判断对象和类关系
![544b16158724fc148734d3781ef086b4.png]()
issubclass:判断两个类是否是父子关系
![6b3232d9c79caec881b4e6433cf09a45.png]()
iter:迭代函数
![959825d2b01ce74587475fe77782f5b3.png]()
len:求长度
![0234affb8519769563b3ebe6240d7a19.png]()
list:列表
![acee76fe033f84ec2117722ca7a2a871.png]()
locals:本地符号表字典
![d67aa94753b49f3347cd7ea0b9968c60.png]()
map:对迭代器的对象进行操作
![9982472069b15175825753e5a2d43f0b.png]()
max:求最大
![ef45c104d8ae88eb5f3e6117c7407b0b.png]()
min:求最小
![babe27d487bf563bebf1462ec5e05f20.png]()
next:迭代器的迭代函数
![83536150effb54eaefabd2dba5667ac6.png]()
oct:整数转 8 进制
![a8c290e6bc28bb02234fa7ae8c100bf7.png]()
open:打开文件
![ef3187e949ae86f23889d309bfd403d3.png]()
ord:字符转整数
![cc09a2eaa600978d4c142e65d47b5e2e.png]()
pow:求平方
![2fb14a3146c88bca9e17ac7e3b9a3a7c.png]()
print:打印
![d42afa92add7e4264807a8d690129d41.png]()
property:属性
![6f081fce7dd141d48e306d2acd0981ae.png]()
range:序列类型
![57b9cfaa0003a7107860b073fd68421f.png]()
repr:打印对象字符串
![d186aa7169c7f85e1a3d968cd17999fb.png]()
reversed:倒序
![3d807b7d60ca4bf72b22c609ee616e85.png]()
round:四舍五入取整
![6f67b9be10ea592b5e3369329a93e669.png]()
set:集合
![4a330910f174f320bdbeb3c2581c8984.png]()
setattr:设置对象属性
![76d2428a838efc5996aee465d00a781e.png]()
slice:切片
![0419e33bdb865991653fef1c086629f8.png]()
sorted:排序
![4780dcee40479ce2189566b3c083758d.png]()
staticmethod:静态类型函数装饰器
![d7a3662b75ca74a485e353090b2345e1.png]()
str:字符串
![487fe0e867a1037d4ff019cfce579579.png]()
sum:求和
![3a74a8d815583c0296b57750944dbc36.png]()
super:调用父类方法
def super(cls, inst):  | |
mro = inst.__class__.mro()  | |
return mro[mro.index(cls) + 1]  | 
.png)
mro 的 C3 超类线性化算法:
算法思想:
- 对象父类的集合 
「L(自己)」可以视作「自己」+ 每个「L(父类)」+「父类集合」 - 在存在多个父类合并的情况下,优先提取出第一个集合中的第一个元素与其他集合进行比对,如果其同时出现在其他集合的 
非第一的位置则跳至下一个集合重复上述操作。否则则把该元素添加至父类列表,并从其余所有集合中移除,完成后再次从第一个集合提取第一个元素重复上述内容。 
.png)
以上图的 Z 为例:
L(O) = [O]  | |
L(C) =[C,O]  | |
L(A) =[A,O]  | |
L(B) =[B,O]  | |
L(D) =[D,O]  | |
L(E) =[E,O]  | |
L(K1) = [K1]  | |
+ L(C)  | |
+ L(A)  | |
+ L(B)  | |
+ [C,A,B]  | |
L(K1) = [K1]  | |
+ [C,O]  | |
+ [A,O]  | |
+ [B,O]  | |
+ [C,A,B]  | |
L(K1) = [K1,C,A,B,O]  | |
L(K2) = [K2,A,B,D,O]  | |
L(K3) = [K3,B,D,E,O]  | |
L(Z) = [Z]  | |
+L(K1)  | |
+ L(K3)  | |
+ L(K2)  | |
+ [K1,K2,K3]  | |
L(Z)= [Z]  | |
+ [K1,C,A,B,O]  | |
+ [K2,A,B,D,O]  | |
+ [K3,B,D,E,O]  | |
+ [K1,K2,K3]  | |
L(Z) = [Z,K1,K2,K3]  | |
+ [C,A,B,O]  | |
+ [A,B,D,O]  | |
+ [B,D,E,O]  | |
L(Z) = [Z,K1,K2,K3,C,A,B,D,E]  | |
+ [O]  | |
+ [O]  | |
+ [O]  | |
L(Z) = [Z,K1,K2,K3,C,A,B,D,E,O]  | 
注意事项: super().func() 调用,不像 类名.func() 的显式,而是带有一些隐式的逻辑。 super().func() 的调用链路取决与 mro 的线性化顺序,会受到继承的父类顺序,以及是否存在多继承等问题而发生变化,并且如果需要调用多个父类的函数,就必须保证父类也支持 super() 操作,否则容易出现调用链中断的情况。
参考链接:传送门
- mro:父类线性化
 
__mro__ 的返回值是一个 tuple,其中包含本身的父类线性关系。包括父类和父类的父类与本身的一个线性化关系。
可以通过 __mro__.index(class) 的方式来确定某个类在线性关系中所处的位置
.png)
- bases:父类元组
 
__bases__ :获取子类对象的上一层父类元组
.png)
相关 mro 介绍
tuple:元组
![cb4f0a949f79d609230e1c2e0fcb6bf1.png]()
type:获取对象的类型
![c4cba5663227461e212276c874acfdb0.png]()
vars:查看对象内属性
![af184e8f621e70ecf397799145b60138.png]()
zip:压缩两个可迭代对象为一个
![0f1abeded0c4884aef918e53a8fd64c5.png]()
__import__:和 import 功能类似![5921973253da54d4c66f8f76a1e6b0ff.png]()

.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)