python中的生成器和迭代器,迭代器,生成器,装饰器
大家好,本文主要讲python中迭代器、生成器、装饰器的详细讲解。有兴趣的同学过来看看,如果对你有帮助记得收藏。
00-1010迭代器生成器装饰器摘要
目录
每个iterable类都必须实现__iter__()方法来返回迭代类对象,该对象定义iterable类如何迭代。
本质上,list的循环调用调用list的迭代器进行迭代。
#在链表上做一个for循环,本质上就是调用链表的迭代器。
list=[1,2,3,4]
# for循环调用
对于列表:中的elem
打印(elem)
#迭代器调用
list_iter=list。__iter__()
而True:
尝试:
打印(下一个(list_iter))
StopIteration:除外
破裂
实现一个自定义的迭代类,规定迭代一个迭代数据结构是“倒计时”模式。
#迭代对象类
班级倒数(对象):
def __init__(self,num):
self.num=数字
def __iter__(self):
返回MyIterator(self.num)
#迭代类
类MyIterator(对象):
def __init__(self,num):
自我。数字=数字
自我。最终=0
self.now=num
def __iter__(self):
回归自我
def __next__(self):
如果self,step=1。NUMself .最终else -1
趁现在!=自我。最终:
self.now=step
返回自我。现在-步骤
提升停止迭代
cd_pos=倒计时(5)
cd_neg=倒计时(-5)
对于I,j在zip(cd_pos,cd_neg):
print(f pos : { I } \ tneg : { j } )
迭代器
包含yield指令的函数可以称为生成器,它可以将函数执行对象转换为迭代对象。这样可以像调试一样一步步推进功能。可以实现的功能是可以实现函数的内部暂停,可以实现程序的异步功能,从而进行函数与外部组件的信息交互,实现系统的解耦。
从集合导入迭代
def f():
及格
#包含yield指令的函数可以称为生成器。
def g():
产量()
print(type(f()),isinstance(f(),Iterable))
print(type(g()),isinstance(g(),Iterable))
发电机可以减少系统的耦合。
导入操作系统
# Generator是迭代器的一种,在函数对象内部迭代。
#可以实现函数的内部暂停,实现程序的异步功能,也可以实现解耦。
def my_input():
全球str
str=input(“输入一行”)
及格
def my_write():
用open(workfile.txt , w )作为f:
while(str):
f.write(str \n )
产量()
返回
mw=my_write()
while(True):
我的输入()
尝试:
接下来(兆瓦)
StopIteration:除外
及格
如果不是str:
破裂
>
装饰器
装饰器封装一个函数,并且用这样或者那样的方式来修改它的行为。
不带参数的装饰器
# 不带参数的装饰器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
# 在函数定义前加入此注解就可以将函数传入装饰器并包装
@mydecorator
def f():
print(hi)
pass
f()
print(f.__name__)
带参数的装饰器(实现输出到自定义的日志文件)
# 带参数的装饰器(实现输出到自定义的日志文件)from functools import wraps
def 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 wraps
def 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迭代器,生成器与装饰器内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。