python 迭代器 可迭代 生成器 装饰器

1.迭代器

比喻:迭代器就好像你拿着书签去书架上逐本找书,这个书签就是一个迭代器

迭代器是一个可以逐个访问容器元素的对象,它不仅可以访问这些元素,还能记住上次访问到的位置。迭代器实现两个方法:

__iter__():返回迭代器本身

__next__():返回下一个元素,并更新位置。如果没有更多的元素,它就会引发一个叫做StopIteration的异常

如何运作:迭代器就是从容器中取元素的工具,他会记住你已经取到哪一个元素了,并能继续从下一个元素继续取

class MyIterator:
    def __init__(self,data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        result = self.data[self.index]
        self.index += 1
        return result
iterator = MyIterator([1,2,3])
for item in iterator:
    print(item)

2.可迭代 

比喻:想象一下你有个装满书的书架,这些书就像可迭代的对象

可迭代的对象就像一个容器或集合,里面有多个元素,你可以对这些元素进行遍历。在python中,列表(list),元组(tuple),字符串(str)都是可迭代对象,他们都实现了一个特殊的方法叫做__iter__():,这个方法返回一个迭代器

如何运作:你可以把迭代对象看做是一个存放元素的容器,比如一个列表,你告诉python我有一堆东西,你可以从里面取东西

my_list = [1,2,3]
for item in my_list:
    print(item)

3.生成器

什么是生成器,生成器是一种特殊类型的迭代器,用于简化迭代过程。他们允许你逐步生成数据,而不是一次性地生成所有数据,从而节省内存

如何使用生成器,生成器使用yield关键字来生成值。每次调用生成器的__next__():方法(或者使用for循环时隐式调用)时,生成器会继续从上次yield的位置回复并生成下一个值。

def count_up_to(max):
    count = 1
    while count <= max:
        yield count
        count += 1

# 使用生成器
for num in count_up_to(5):
    print(num)

定义生成器

count_up_to是一个生成器函数。

yield count表示每次迭代时生成当前count值,并暂停执行,等待下一次调用。

for num in count_up_to(5)

每次迭代,生成器都会从上一次的yield继续执行,直到遇到下一个yield

4.装饰器

什么是装饰器:在不改变函数的情况下,在外部给函数添加功能

import random
import time

datas = [random.randint(0, 1000) for i in range(10000)]
datas_copy = datas.copy()


def time_cost(f):
    def clac():
        start = time.time()
        f()
        print(f"函数{f.__name__}消耗{time.time() - start}")

    return clac


@time_cost
def my_fun1():
    datas.sort()
    print(datas)


my_fun1()


@time_cost
def my_fun2():
    datas.sort()
    print(datas)


my_fun2()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值