python笔记-0508

本文介绍了Python中的迭代器、生成器和装饰器。迭代器是实现__iter__和__next__方法的对象,用于节约内存。生成器是迭代器的一种,包含yield关键字,可用于生成斐波那契数列。装饰器是闭包函数,用于不修改原函数情况下扩展其功能。文中还详细讲解了各种装饰器的创建和使用。
摘要由CSDN通过智能技术生成

一、迭代器
1、迭代器:拥有__iter__和__next__方法的对象就是迭代器。

2、迭代:是访问集合元素的一种方式,可以将某个数据集内的数据“一个挨着一个的取出来”,就叫迭代。

3、可迭代协议:内部实现了__iter__方法。

4、迭代器协议:必须拥有__iter__方法和__next__方法。

5、能被for循环的内容:list,dic,str,set,tuple,f.open(),range(),enumerate

6、dir()方法能获取对应数据类型的所有方法。例如:print(dir([]))

①利用dir()查看共有方法

a = set(dir([])) & set(dir({})) & set(dir("")) & set(dir(range(1)))
print(a) #{'__gt__', '__iter__', '__ge__', '__delattr__', '__new__', '__contains__', '__le__', '__str__', '__init_subclass__', '__init__', '__class__', '__setattr__', '__eq__', '__sizeof__', '__getitem__', '__getattribute__', '__lt__', '__hash__', '__subclasshook__', '__dir__', '__reduce__', '__format__', '__repr__', '__ne__', '__doc__', '__len__', '__reduce_ex__'}

②判断int类型是否有__iter__方法。

print("__iter__" in dir(int))  #False

7、iter()方法的作用:返回一个迭代器。

a = [1,2,3,4,5]
b = a.__iter__()
print(b) #<list_iterator object at 0x00000000020E7470>处理list对象的迭代器位于XX地址
print(next(b))  #1,运行一次迭代器,输出1

8、打印迭代器中的方法:

a = set(dir([].__iter__())) - set(dir([])) #求差值
print(a) #{'__length_hint__', '__setstate__', '__next__'}

9、for循环原理
①for循环一个可迭代对象(实现__iter__方法)
②__iter__方法返回一个迭代器(迭代器实现了__iter__和__next__方法)
③for先判断对象哪些范围需要迭代,然后调用迭代器的__next__方法获取值

10、迭代器作用:节约内存

11、数据类型转换:例如元组和列表间的转换底层,就是使用迭代器实现的

a = "hello"
b = list(a)
print(b) #['h', 'e', 'l', 'l', 'o']

c = (1,2,3)
d = list(c)
print(d) #[1, 2, 3]

12、利用迭代器,生成斐波那契数列

class Fib():
    def __init__(self,num):
        self.num = num
        self.a = 1
        self.b = 1
        self.current = 1
    def __iter__(self):
        return self  #返回自己,调用自己的__next__方法
    def __next__(self):
        if self.current <= self.num:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值