千家信息网

python中的迭代器,生成器与装饰器怎么用

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"python中的迭代器,生成器与装饰器怎么用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python中的迭代器,生成器与装饰器怎
千家信息网最后更新 2025年11月07日python中的迭代器,生成器与装饰器怎么用

这篇文章主要讲解了"python中的迭代器,生成器与装饰器怎么用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python中的迭代器,生成器与装饰器怎么用"吧!

迭代器

每一个可迭代类内部都要实现__iter__()方法,返回一个迭代类对象,迭代类对象则定义了这个可迭代类如何迭代。

for循环调用list本质上是是调用了list的迭代器进行迭代。

# 对list进行for循环本质上是调用了list的迭代器list = [1,2,3,4]# for 循环调用for elem in list:    print(elem)# 迭代器调用list_iter = list.__iter__()while True:   try:    print(next(list_iter))    except StopIteration:       break

实现一个自己自定的迭代类,规定迭代一个可迭代的数据结构为"倒计时"模式。

# 可迭代对象类class CountDown(object):    def __init__(self,num):        self.num = num    def __iter__(self):        return MyIterator(self.num)# 迭代类class MyIterator(object):    def __init__(self,num):        self.NUM= num        self.FINAL = 0        self.now = num            def __iter__(self):        return self        def __next__(self):        step = 1 if self.NUM

生成器

含有yield指令的函数可以称为生成器,它可以将函数执行对象转化为可迭代的对象。这样就可以像debug一样一步一步推进函数。可以实现的功能是可以实现让函数内部暂停,实现了程序的异步功能,这样可以及进行该函数与外部构件的信息交互,实现了系统的解耦。

from  collections import Iterabledef f():    pass# 含有yield指令的函数可以称为生成器def g():    yield()print(type(f()),isinstance(f(),Iterable))print(type(g()),isinstance(g(),Iterable))

使用生成器可以降低系统的耦合性

import os# 生成器是迭代器的一种,让函数对象内部进行迭代# 可以实现让函数内部暂停,实现了程序的异步功能,同时也实现了解耦。def my_input():    global str        str = input('input a line')    passdef my_write():    with open('workfile.txt','w') as f:        while(str):            f.write(str+'\n')            yield()        return mw = my_write()while(True):    my_input()    try:        next(mw)    except StopIteration:        pass    if not str:        break

装饰器

装饰器封装一个函数,并且用这样或者那样的方式来修改它的行为。

不带参数的装饰器

# 不带参数的装饰器from functools import wraps# 装饰器封装一个函数,并且用这样或者那样的方式来修改它的行为。def mydecorator(a_func):    @wraps(a_func)  #声明这个注解就可以不重写传入的函数,只是调用的时候wrap一下。不加的话,a_func函数可以看作被重写为wrapTheFunction.    def wrapTheFunction():        print(f"function in {id(a_func)} starts...")        a_func()        print(f"function in {id(a_func)} ends...")    return wrapTheFunction# 在函数定义前加入此注解就可以将函数传入装饰器并包装@mydecoratordef f():    print('hi')    passf()print(f.__name__)

带参数的装饰器(实现输出到自定义的日志文件)

# 带参数的装饰器(实现输出到自定义的日志文件)from functools import wrapsdef logit(logfile='out.log'):    def mydecorator2(a_func):        @wraps(a_func)        def wrapTheFunction(*args, **kwargs):   # 这个保证了函数可以含有任意形参            log_string = a_func.__name__ + " was called"            print(log_string)            # 打开logfile,并写入内容            with open(logfile, 'a') as opened_file:                # 现在将日志打到指定的logfile                opened_file.write(log_string + '\n')                return a_func(*args, **kwargs)        return wrapTheFunction    return mydecorator2# func group1 @ logit('out1.log')def func1(str):    print(str)    pass@ logit('out2.log')def func2(): pass            func1('I have a foul smell')func2()

实现一个装饰器类(这样写可以简化装饰器函数,并且提高封装性)

# 带参数的装饰器(实现输出到自定义的日志文件)from functools import wrapsdef logit(logfile='out.log'):    def mydecorator2(a_func):        @wraps(a_func)        def wrapTheFunction(*args, **kwargs):   # 这个保证了函数可以含有任意形参            log_string = a_func.__name__ + " was called"            print(log_string)            # 打开logfile,并写入内容            with open(logfile, 'a') as opened_file:                # 现在将日志打到指定的logfile                opened_file.write(log_string + '\n')                return a_func(*args, **kwargs)        return wrapTheFunction    return mydecorator2# func group1 @ logit('out1.log')def func1(str):    print(str)    pass@ logit('out2.log')def func2(): pass            func1('I have a foul smell')func2()

感谢各位的阅读,以上就是"python中的迭代器,生成器与装饰器怎么用"的内容了,经过本文的学习后,相信大家对python中的迭代器,生成器与装饰器怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

迭代 函数 生成器 生成 对象 参数 日志 内容 功能 文件 学习 封装 循环 输出 指令 方式 本质 注解 程序 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 行唐软件开发哪家好 网络安全年度报告2020年 河南苍穹互联网科技 北京车到网络技术 个人软件开发 个体 公司 网络安全与网络文化选课 国家网络安全宣传周法治日教案 重庆惠普服务器续保更换 广州二手服务器回收有哪些公司 一个app可以有两个数据库吗 教育局网络安全工作总结 互联网最受欢迎的科技公司 服务器 ip配置 信息软件开发内部承包合规性 杭州捕鱼游戏软件开发公司 加工网络技术设计 客户服务器计算模式优点 金华安卓系统软件开发公司 河北社保网络安全 软件开发类科技项目 和平精英的服务器如何设置 饥荒服务器管理mod使用 大众车系车载网络技术试卷 怎样获取大量生产数据库 数据绘图软件开发 幻塔同服务器为什么我看不到好友 东软网络安全审计系统 越秀区大数据软件开发工程师 浙江电视墙服务器怎么安装 如何管理软件开发人员
0