python自定义迭代器_python--自定义迭代器的学习

#如何得到自定义的迭代器:

#在函数内一旦存在yield关键字,调用函数并不会执行函数代码体代码

#会返回一个生成器对象,生成器即自定义的迭代器

# def func():

# print("第一次")

# yield 1

# print("第二次")

# yield 2

# print("第三次")

# yield 3

# g=func()

# print(g)

#

# #会触发函数体代码的运行,然后遇到yield 停下来,将yield 后的值当作本次调用的结果返回

# res=g.__next__()

# print(res)

# res1=g.__next__()

# print(res1)

# res2=g.__next__()

# print(res2)

#g.__iter__()

"""补充"""

# l="123"

# len(l)--->l.__len__()

# iter(l)--->l.__iter__()

# next(l)--->l.__next__()

"""应用案例"""

#能产生无穷个值的迭代器

# def my_range(start,stop,step):

# print("start******")

# while start

# yield start

# start+=step

# print("end******")

#

# g=my_range(1,7,2)

# print(next(g))

# print(next(g))

# print(next(g))

# print(next(g))

"""优化"""

# def my_range(start,stop,step):

# print("start******")

# while start

# yield start

# start+=step

# print("end******")

# for i in range(1,7,2):

# print(i)

#有了yield关键字,我们就有了一种自定义迭代器的实现方式。

#yield可以用于返回值,但不同于return,函数一旦遇到return就结束了,而yield可以保存函数的运行状态挂起函数,用来返回多次值

#一、叠加多个装饰器的加载,运行分析

defdeco1(func1):def wrapper(*args,**kwargs):#fun3=Wrapper2的内存地址

print("正在运行===》deco1.rapper1")

res2=func1(*args,**kwargs)returnres2returnwrapperdefdeco2(func2):def wrapper2(*args,**kwargs):#fun3=Wrapper3的内存地址

print("正在运行===》deco2.rapper2")print()

res2=func2(*args,**kwargs)returnres2returnwrapper2defdeco3(x):defoutter3(func3):def wrapper3(*args,**kwargs):#fun3=被装饰对象index函数的内存地址

print("正在运行===》deco3.rapper3")print()

res3=func3(*args,**kwargs)returnres3returnwrapper3returnoutter3#加载顺序自下往上

@deco1 ##index=deco1(wrapper2的内存地址)--》index=wrapper1的内存地址

@deco2 #index=deco2(wrapper3的内存地址)--》index=wrapper2的内存地址

@deco3(111) #-->@outter3-->index=outter3(index)===>index=wrapper3的内存地址

defindex(x,y):print("from index %s,%s" %(x,y))print(index)#执行顺序:执行顺序是自上而下的,即wrapper1-->wrapper2-->wrapper3

index(1,2)

/usr/local/bin/python3.8 /Users/futantan/PycharmProjects/S14/函数的学习/自定义迭代器.py.wrapper at 0x108f43280>正在运行===》deco1.rapper1

正在运行===》deco2.rapper2

正在运行===》deco3.rapper3from index 1,2Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值