愚公移山日记·27

愚公移山日记·27

学习进程

今天搞的是迭代器,生成器,然后是自定义列表,还有之前弄过的斐波那契数列。
迭代器

from collections import Iterable

# 可迭代的对象
for value in (4, 5, 6):
    print(value)
print('--' * 20)
ret = isinstance([1, 23, 4], Iterable)
print(ret)
# 自定义一个类
class MyClass(object):
    # 增加一个__iter__ 方法
    # 该方法就是一个迭代器
    def __iter__(self):
        pass
myclass = MyClass()
ret = isinstance(myclass, Iterable)
print(ret)
print('--' * 20)
# 可遍历对象,就是可迭代对象
# 列表,元组,字典,字符串,都是可以迭代的对象
# 数字和自定义的myclass 默认都是不可以迭代的对象
# 如果myclass对象所属的类 Myclass包含来的__iter__()方法,此时
# myclass是一个可迭代对象
# 可迭代对象的本质是对象的类中包含了--iter--() 方法
# 检测一个对象是否可迭代,用 Iterable()函数检测
-----------------------------------------------------------------------------
# __iter__ 是一个迭代器
# 一个可迭代对象可以提供一个迭代器
# 可迭代对象---》iter(可迭代器)---》next(迭代器)
data_list = [1, 2, 34, 5]
for i in data_list:
    print(i)
# 获取迭代器
l1_iterator = iter(data_list)
# 根据迭代器获取下一个元素
i = next(l1_iterator)
print(i)
# 迭代器的特点:
# 记录遍历的位置
# 提供下一个元素的值(配合next()函数)
# for 循环的本质:
#     通过iter(可迭代对象) 获取要遍历的对象迭代器
# next(迭代器)获取下一个元素
# 帮我们捕获了一个异常
# 自定义迭代器的类,满足两点:
# 必须含有__iter__()
# 必须含有__next__()
class Myclass(object)
    def __iter__(self):
        pass
    def __next__(self):
        pass

自定义类来解决斐波那契数列

# 自定义迭代器
# 自定义迭代器的类
# 类中必须包含 __iner__()方法
# 类中必须包含 __next__()方法
class Fibnacci(object):
    def __init__(self, num):
        self.num = num
        # 定义斐波那契数列
        self.a = 1
        self.b = 1
        self.current_index = 0

    def __iter__(self):
        return self
    def __next__(self):
        # 判断列数是否超出范围
        if self.current_index < self.num:
            # 定义变量 保存a的值
            data = self.a
            # a = b, b = a + b
            self.a, self.b = self.b, self.a + self.b
            # 当前列数加一
            self.current_index += 1
            # 返回a的值
            return data
        # 如果超出范围 报错
        else:
            raise StopIteration
if __name__ == '__main__':
    fib_iterator = Fibnacci(8)
    i = next(fib_iterator)
    print(i)
    i = next(fib_iterator)
    print(i)
    i = next(fib_iterator)
    print(i)
    i = next(fib_iterator)
    print(i)
    i = next(fib_iterator)
    print(i)
    i = next(fib_iterator)
    print(i)
    #或者直接使用for循环可以得出
    # for i in fib_iterator:
    #     print(i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值