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

可迭代对象 ,最简单的理解就是可以使用for循环, 常见的可迭代对象包括列表、元组、字典、集合和字符串等。

迭代器 ,就是可迭代对象的升级版,不仅可以使用for循环还可以用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):
            value = self.data[self.index]
            self.index += 1
            return value
        else:
            raise StopIteration

my_iterator = MyIterator([1, 2, 3])
for value in my_iterator:
    print(value)  # 输出 1 2 3

生成器 ,在迭代器的版本上再升级一版,生成器存储的不是值,而是一个代码逻辑。比如元组的推导式的返回值就是一个生成器。

from collections.abc import Iterator, Iterable, Generator

s = (i for i in range(1, 18))
print(isinstance(s, Iterable), isinstance(s, Iterator), isinstance(s, Generator), next(s))

相比较与迭代器,生成器的内存效率和代码简洁性方面都非常有用。

装饰器 ,装饰器是用于修改或增强函数或方法行为的函数。装饰器接收一个函数作为参数,并返回一个新的函数。它们常用于日志记录、访问控制、缓存等场景。

import time
import random
def cost_time(f):
    def calc():
        start = time.time()
        f()
        print(f'函数{f.__name__}消耗{time.time() - start}')

    return calc


date = [random.randint(1, 10000) for i in range(10000)]
date1 = date.copy()
date2 = date.copy()


@cost_time
def my_sort():
    date1.sort()
    print(date1)


def my_sorted():
    date3 = sorted(date2)
    print(date3)


my_sorted = cost_time(my_sorted)

my_sort()
my_sorted()

经典装饰器,统计函数时间开销。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的迭代器生成器装饰器都是非常重要的编程概念,下面分别介绍一下: 1. 迭代器 Python中的迭代器是一种可以遍历集合中元素的对象,可以使用for循环遍历集合中的元素。迭代器实现了两个方法:__iter__()和__next__()。__iter__()方法返回迭代器对象自身,__next__()方法返回集合中的下一个元素。 下面是一个简单的使用迭代器遍历列表的示例: ``` my_list = [1, 2, 3] my_iterator = iter(my_list) for i in my_iterator: print(i) ``` 2. 生成器 生成器是一种特殊的函数,可以在执行过程中多次返回值,而不是只返回一次。生成器使用yield语句返回值,可以暂停函数的执行,并在需要时继续执行。 下面是一个简单的生成器示例: ``` def my_generator(): yield 1 yield 2 yield 3 for i in my_generator(): print(i) ``` 3. 装饰器 装饰器是一种可以修改函数或类的行为的函数,可以在不修改原始代码的情况下添加额外的功能。装饰器本质上是一个可以接受函数或类作为参数的函数,可以在不修改原始函数或类的情况下修改其行为。 下面是一个简单的装饰器示例: ``` def my_decorator(func): def wrapper(): print("Before the function is called.") func() print("After the function is called.") return wrapper @my_decorator def my_function(): print("Inside the function.") my_function() ``` 在上面的代码中,我们定义了一个装饰器函数my_decorator,它接受一个函数作为参数,并返回一个新的函数wrapper。这个新函数在调用原始函数之前和之后打印一些文本。我们使用@符号将装饰器应用到my_function函数上,这样my_function函数的行为就被修改了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值