迭代器 (是python最强大功能之一,是访问集合元素的方式)
两个概念,可迭代的对象,迭代器对象。可迭代的(Iterable):就是可以for循环取数据的,比如字典、列表、元组、字符串等,但不能使用next()方法。迭代器(Iterator),也是可以依次迭代取出数据的对象,可以使用next()方法依次取数据。
#两个基本方法 __iter__ __next__ # class Number: # def __init__(self, end): #__init__为初始化方法,实例化时自动调用 # self.start = 0 # self.end = end # # def __iter__(self): #__iter__使变为可迭代对象 # return self # # def __next__(self): # self.start+=1 #注意数据要更新 # if self.start >= self.end: # raise StopIteration #主动抛出异常,防止迭代异常 # return self.start # # nu = Number(10) # for i in nu: # print(i)
# 生成器 是一次生成一个值的特殊类型函数简单的说就是在函数的执行过程中,yield语句会把你需要的值返回给调用生成器的地方,然后退出函数, 下一次调用生成器函数的时候又从上次中断的地方开始执行,而生成器内的所有变量参数都会被保存下来供下一次使用。 # 定义 class MyNumber(): def __iter__(self): self.a = 1 return self def __next__(self): if self.a < 20: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumber() for x in myclass: print(x) #生成器中的yield def func(): print(1) yield 2 #yield与return的区别在于,前者暂停但可用next实现继续输出,return则直接断 print(3) yield 4 a=func() #print(next(a)) #print(next(a)) print(list(a)) #用list输出时,用print输出的不会放在列表里,但所有数可一次性取出
#装饰器分为自定义和内置 #自定义装饰器 def upgrade(f): def drilling(): print("钻火圈") f() return drilling @upgrade def cat(): print("抓老鼠") cat() #内置 class Person(): def __init__(self, name): #此代码块作为原型,与下面代码块比较得出内置装饰器的作用 self.name = name def play(self): print(self.name + "play") zt = Person('大龙') zt.play() #输出结果为 大龙play #2 class Person(): def __init__(self, name): self.name = name @property # 可以让方法像属性一样调用 def play(self): print(self.name + "play") zt = Person('大龙') zt.play #输出结果 大龙play #3 class Person(): def __init__(self, name): self.name = name @classmethod # 类方法 把你自动传入的实例化对象变成是自动传入类 def eat(cls): print(f'{cls}吃饭') zt = Person('大龙') zt.eat() # 输出 <class '__main__.Person'>吃饭 #4 class Person(): def __init__(self, name): self.name = name @staticmethod # 静态方法 不需要去传入任何的参数 def sleep(): print("睡觉") zt = Person('大龙') zt.sleep() #输出 睡觉