描述符
将某种特殊类型的类【只要实现了以下或其中一个】的实例指派给另一个类的属性
1.__get__(self,instance,owner)//访问属性,返回属性的值
2.__set__(self,instance,value)//将在属性分配【即赋值】中调用,不返回任何内容
3.__delete__(self,instance)//控制删除操作,不反回任何内容
重写property
Del ---delete
练习
定制序列【定制容器】 容器---序列【字符串,元组,列表】+映射类型【字典】
练习 不可变类型 记录每个元素的访问次数
*args表示参数可变数量
self.values = [x for x in args] //列表推导式的形式,把参数放到列表values中
接着第二行为字典的初始化操作,键值对---数值-访问次数【全化为0】的形式
迭代器
【提供迭代方法的容器称为迭代器】 ---as字典,字符串,元组
常利用for循环!
for i in “xxxxx”:
Print(i)
迭代器内置函数:
iter(xxx) 容器对象调用iter()得到迭代器
next(xxx)返回下一个值,没有值可以返回了,python就抛出StopIteration的异常
string = "ssada"
a = iter(string)
迭代器的魔法方法:
__iter__()
__next__()
生成器【特殊的函数,可终端、暂停可暂时交还控制权】
生成器【特殊的迭代器,是他的一个实现】
函数中有yield语句,此函数被定义为生成器
斐波那契数列:
列表推导式:
字典推导式:
集合推导式:
生成器推导式
()括起来的,,,,,,
yield = return //不过有暂停功能
模块【更高级的封装】
即保存了一个.py的程序文件即是模块
导入模块
1.
import xx
xx.yy() ----使用导入模块中的方法
2.
form 模块名 import 函数名
yy()
3.
import 模块名 as 新名字
x.yy() ----使用导入模块中的方法
__name__、__main__、搜索路径和包
可以在每个模块后编写测试方法 ---
def test():
……
test() //调用
防止模块中测试方法在主程序中被使用显示
__name__
'__main__' //主程序中如此显示
xx.__name__
'显示模块名' //模块中如此显示
搜索路径
import 包名.模块名