python---装饰器---迭代器---生成器

#装饰器:在不改变源代码和调用方式的基础之上给函数增加新的功能
def deco(func):
    def wrapper():
        func()               #(test)的test是实参 将这个实参赋予func即 func = test
        print('this is new 功能')
    return wrapper
def test():                 #源代码
    print('欢迎')           #源代码
test=deco(test)             #(test)的test是实参 将这个实参赋予给形参func即 func = test
test()                      #test = deco()执行结果的返回值即 即test = wrapper
                            # 调用test()即是调用wrapper() 然后执行 wrapper()这个函数 执行func()即是test()(上边给func赋予的实参)
                            #执行完test这个函数之后就执行print('this is new 功能')
#正常写法
def deco(func):
    def wrapper():
        func()
        print('this is new 功能')
    return wrapper
@deco   #test=deco(test)
def test():
    print('欢迎')
test()
#迭代器
#1.迭代是一个重复的过程,即每一次重复为一次迭代,
#2.并且每次迭代的结果都是下一次迭代的初始值
# l = [1,2,3]
# count=0
# while count<len(l): #首先是重复动作,其次上一次的结果是下一次的初始值,因此,是迭代
#     print(l[count])
#     count+=1
#为什么要有迭代器?什么是可迭代对象?什么是迭代器对象?
#1.为何要有迭代器?
# 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。
# 但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,
# 则必须找出一种不依赖于索引的迭代方式,这就是迭代器。
l1 = [1,2,3]
t1 = (1,2,3)
str1 = '123'
num1 = 100
num2 = 100.1
s1 = {1,2,3}
d1 = {'name':'aaa','age':'bbb'}
f = open('mariadb.repo','r', encoding='utf-8')
# 2.什么叫做可迭代对象?obj有.__iter__方法的都叫做可迭代对象
l1.__iter__()
t1.__iter__()
str1.__iter__()
s1.__iter__()
d1.__iter__()
f.__iter__()
# 3.什么叫做迭代器对象?obj有.__iter__和.__next__方法的叫做迭代器对象
f.__next__()
f.__iter__()
res1 = iter(l1)
res2 = iter(t1)
str3 = iter(str1)
res4 = iter(s1)
res5 = iter(d1)
#for的作用:
    # 1.把可迭代对象变成迭代器对象
    # 2.过滤错误信息
# for i in l1:#iter(l1)
#     print(i)
# 总结:迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象

#什么是生成器?
#只要函数里有yield关键字,那么函数名()得到的结果就是生成器,生成器就是迭代器,并且不会执行函数内部代码
#return只能返回一个值,而yield可以返回多个值
#生成器优点:
# 同一时间只存储一个值,节省内存空间
#生成器的缺点:
# 只能向后取值,不能往前取值
def test():
    for i in range(100):
        yield i
res = test()
for k in res:
    print(k)
#print(next(res))   
# print(next(res))
# print(next(res))

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值