协议与生成器,装饰器,

目录

协议:

一:序列协议:只要实现了getitem和len方法,就会被认为是序列。

二:迭代器协议

三:上下文协议

生成器 :

创建生成器

装饰器:

一:自定义装饰器

二:内置装饰器


协议:

一:序列协议:只要实现了getitemlen方法,就会被认为是序列。

print(tuple(enumerate([1, 2, 3])))  #枚举函数

class IndexTuple():
    def __init__(self, *args):
        self.values = tuple(args)
        self.index = tuple(enumerate(self.values))

    def __len__(self):
        return len(self.values)

    def __getitem__(self, key):  # key = 1
        return self.index[key][1]


tu = IndexTuple(1, 2, 3, 4)
print(len(tu))
print(tu[3])

例2:
from enum import Enum

class traffictlight(Enum):     #继承枚举类,枚举成员不可重复
    RED=1       #枚举成员    RED是枚举的名字,1是枚举的值
    YELLOW=2
    GREEN=3
    
#枚举成员的比较    print(traffictlight.YELLOW.value == 1)   返回True
    
print(type(traffictlight.YELLOW))
print(traffictlight.YELLOW.name)
print(traffictlight.YELLOW.value)
print(traffictlight(2))            #通过枚举值获取枚举成员


def judge(color):
  if color ==traffictlight.RED or color==traffictlight.YELLOW:   
      print("司机超速")
  else:
    print("正常行驶")


judge(traffictlight.GREEN)

#输出:

<enum'traffictlight'>
YELLOW
2
traffictlightYELLOW
正常行驶

二:迭代器协议

迭代器协议:让我们的类成可迭代的类,能够使用for循环迭代

1、迭代器协议

对有next方法的对象(也就是迭代器对象)自动调用next,直到结尾引发stopIteration。

2、迭代工具

迭代工具按迭代器协议处理迭代器。

常见工具有for,list()、tuple()、str.join()列表解析、in、map、sorted、zip、enumerate、filter、sum、any……

3、iterabel可迭代对象

实现了iter方法的对象叫做可迭代对象。

4、iterator迭代器

实现了next方法的对象叫做迭代器。

5、for-in语句的执行逻辑: 首先判断对象是否有iter方法,如果有,先it=iter&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值