Python个人学习笔记 杂项(一)
⑴ 动态设置/获取对象的属性
⑵ isinstance()函数
⑶ 重写
⑷ 装饰器
⑸ functools.reduce()函数
⑹ enumerate()函数
⑺ filter()函数
⑻ 函数名变量
⑼ 数字内下划线
⑽ help()函数 函数注释

⑴ setattr() / getattr()
动态设置/获取对象的属性。
可以根据需要,用 setattr() 函数动态地设置类中没有预设过的属性。
用 getattr() 函数可以获取属性。

⑵ isinstance()函数
用于判断类型。
相比用 type() 函数,可以一次同时判断多种类型。
第一个参数为判断的对象,第二个参数为类型,或者多个类型组成的元组。

⑶ 重写
子类如果想覆盖或扩展父类中某函数的功能,可以用函数的重写。
例:
定义了一个可以实现负整数乘法的字符串类,但又想要这个自定义字符串类有自带的字符串的所有功能,这时候可以继承原字符串类,然后再重写乘法法则函数。

⑷ 装饰器
用于包装一个函数,可以执行原始函数的所有操作,并添加其他要执行的语句。
装饰器的参数为所要包装的函数的函数名,返回包装好的新函数。
装饰器中,需要定义新函数(函数名也可以随便临时命名一个,最后用原函数名替换新函数名)。参数须为原函数所能接受的参数,但由于可以包装各种不同的函数,并不能确定原函数到底要什么参数,所以需要新函数能接受可变长度参数,用*args接受任意长度的参数列表,用**kwargs接受任意长度的关键字参数(参数名可以随便换,惯用是这2个名)。
在新函数中引用旧函数、添加新语句,最后装包好的函数可以执行原函数和新加语句。
最常用来添加确定函数的执行时长。
也可以给新函数重新命名。
@运算符
用@运算符可以直接包装原函数并把新函数赋值给原函数。

⑸ functools.reduce()函数
对一个序列进行迭代操作,返回一个单一的结果值。
第一个参数为要执行的函数,第二个参数为可迭代对象。
工作原理为,从可迭代对象取出前2个元素执行第一个参数的函数,执行结果与下一个元素再次执行函数,直到结束。
可以少写不必要的循环。
运用operator库,可以不需要再用定义匿名函数来引用基本运算。

⑹ enumerate()函数
用于将一个可迭代对象组合为一个索引序列,同时列出数据和数据下标组成的元组,默认从0开始。

⑺ filter()函数
用于对可迭代对象中的每个元素进行判断,返回值为 True 的元素组成一个迭代器。

⑻ 函数名变量
函数名(包括匿名函数)也可以作为字典、列表的元素。

⑼ 数字内下划线
可以用下划线划分数字(读取时无视下划线,用于方便读取大数字)。
不能放在第一个数字前,不能用双下划线。(会被当作变量名)

⑽ help()函数 函数注释
可以为自定义类和函数写注释。
注释须接在类名、函数名接下来一行,并用三引号引用。
用 help() 函数可查看注释。
