python创建迭代器,python的装饰器,迭代器,yield
本文主要详细介绍python的迭代器、生成器和装饰器。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
python 迭代器与生成器,装饰器
迭代器对象从集合的第一个元素开始访问,直到所有元素都被访问。
迭代器有iter基本方法:iterator()和next()。
字符串、列表或元组对象可用于创建迭代器:
列表1=[1,2,3]
S=iter(list1) #创建迭代器对象
Print(next(s)) #输出迭代器的下一个元素
打印(下一页)
打印(下一页)
在计算完最后一个元素之前,如果没有更多的元素,将引发StopIteration错误。
迭代器对象可以使用常规for语句进行遍历:
列表2=[1,2,3,4,5]
S2=iter(list2) #创建迭代器对象
对于s2:中的h
打印(h,end=-)
生成器
带有yield的函数在Python中称为generator(自己制作迭代器可以看作是一个生成器)。
#注意括号
#列表生成
lis=[x x for x in range(5)]
打印(lis)
#发电机
gen=(x x for x in range(5))
打印(一般)
# gen=(x x for x in range(5))
#打印(下一页)
#打印(下一页)
#打印(下一页)
#打印(下一页)
#打印(下一页)
generator_ex=(x x for x in range(5))
用于发电机_ex:中的I
打印(一)
生成支持小数的范围生成器(即带yield的迭代器)。
先把收益率想成“回报”。这是直观的。一开始是回归。普通返回是什么意思,就是在一个程序中返回某个值,返回之后程序就不再运行下去了。看看return,把它看成生成器的一部分(带yield的函数才是真正的迭代器)。
def frange(星形,停止,步进):
x=星形
而xstop:
产量x
x=步长
因为我在法兰奇(10,20,0.5):
打印(一)
下图最直观的看到了收益率的作用。
把收益当做回报。返回4后,程序停止,并且不执行对res的赋值。
有收益的函数是一个生成器。生成一个生成器看起来像一个函数调用,但它不会执行任何函数代码,直到对它调用next()为止(next()将在for循环中自动调用)。虽然执行流还是按照函数流执行,但是每执行一条yield语句就会被中断,返回一个迭代值。下一次执行将从下一个yield语句继续。看起来好像一个函数在正常执行过程中被yield中断了几次,每次中断都会通过yield返回当前的迭代值。
def foo():
打印(开始.)
而True:
打印(“屈服前”)
res=收益率4
打印(“产出后”)
打印( res: ,res)
g=foo()
打印(下一个(g))
打印( * * 20)
打印(下一个(g))
当我们调用这个函数的时候,第一件事不是执行这个函数,而是把这个函数作为参数传入它头上的帽子,我们称之为装饰函数或者装饰品。
装饰工的使用方法很固定:
先定义一个装饰函数(hat)(也可以用类或者部分函数实现)。
然后定义你的业务职能,或类(人)
最后,把这顶帽子戴在这个人的头上。
饰品的简单用途有很多,这里介绍两个常见的。
日志打印机
时间计时器
#这是一个装饰功能。
定义记录器(功能):
定义包装(*args,**kw):
打印(我准备开始计算:{}函数: 。格式(func。__name__))
#真正执行的是这一行。
func(*args,**kw)
print(‘啊哈,我算完了。给自己加个鸡腿!)
返回包装
@logger
def add(x,y):
print({} {}={} )。格式(x,y,x,y))
加法(200,50)
#这是一个装饰功能。
定义定时器(功能):
定义包装(*args,**kw):
t1=time.time()
#这是函数真正执行的地方
func(*args,**kw)
t2=time.time()
#计算时间长度
成本时间=t2-t1
打印(花费时间:{}秒。格式(成本时间))
返回包装
导入时间
@定时器
def want_sleep(睡眠时间):
时间.睡眠(睡眠时间)
想睡觉(10)
极好的美国():
打印(我来自中国。)
极好的中文():
打印("我来自美国。")
def say_hello(国家):
定义包装(功能):
def deco(*args,**kwargs):
如果国家=中国:
打印(你好!)
elif contry== america :
打印("你好。")
else:
返回
# 真正执行函数的地方
func(*args,**kwargs)
返回装饰
返回包装
@say_hello(中国)
极好的美国():
打印(我来自中国。)
@say_hello(美国)
极好的中文():
打印("我来自美国。")
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行信息技术软件开发工作室的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。