装饰器+迭代器作业

1.叠加装饰器的装饰顺序与执行顺序

​ 装饰顺序,由下而上

​ 执行顺序,由下而上

2.什么是无参装饰器与有参装饰器

​ 无参装饰器是没有传入参数的装饰器

​ 有参装饰器是传入了参数的装饰器,实现用户权限区分

3.简述可迭代对象,迭代器对象及迭代取值方式,及for循环内部原理

​ 内置含--iter--的方法都是可迭代对象

​ 迭代器对象内置含有--iter--和--next--的就是迭代器对象,可以不依赖索引取值而取出容器内的元素,取出的值是通过不断的迭代取出(迭代取出字典时,字典本是无序的,迭代取出那一瞬间python解释器做了优化,变成有序);

​ for循环又称迭代循环,in后面可以跟任意可迭代对象,在循环时,会调用可迭代对象goods内置的--iter--方法拿到一个迭代对象,然后再调用该迭代器对象的next方法将取到的值赋给item,执行循环体完成一次循环,周而复始,知道捕捉到stoplteration异常,结束迭代。

4.迭代器对象的优缺点是什么?

​ 迭代器对象优点:迭代器对象表示的是一种数据流,调用next取值,内存一次只存放一个值。而其他循环内存的值会不断变多,导致内存不够用问题。

​ 迭代器对象缺点:一次只取一个值并且停留,只能往后取值,直到取尽,要想调用前面的值,只能从新调用iter或从新创建一个迭代对象,当两个循环同时使用一个迭代器时,只有一个能调用成功。

5.写出一下func执行的结果

def say_hi(func):
    def wrapper(*args, **kwargs):
        print("HI")
        ret = func(*args, **kwargs)
        print("BYE")
        return re
    return wrapper

def say_yo(func):
    def wrapper(*args, **kwargs):
        print("YO")
        return func(*args, **kwargs)
    return wrapper

@say_hi
@say_yo
def func():
      print("Tank & Jason")
func()

##执行结果:hi, yo, tank&jason,  bye;

6.请实现一个装饰器,限制该函数被调用的频率,如10秒一次

import time

def say_hi(func):
    def wrapper(*args,**kwargs):
        print('嗨!')
        res = func(*args, **kwargs)
        print('苍老师:こんにちは/ko n ni chi ha;'
              'はじめまして/ha ji me ma shi te;'
              'よろしくおねがいします/yo ro shi ku o ne ga i shi ma su;')
        return res
    return wrapper

def say_ya(func):
    def wrapper(*args,**kwargs):
        print('哇!')
        res = func(*args, **kwargs)
        return res
    return wrapper

def time_recode(func):
    def wrapper(*args,**kwargs):
        print('请等10秒.....')
        time.sleep(1)
        print('1.')
        time.sleep(1)
        print('2..')
        time.sleep(1)
        print('3...')
        time.sleep(1)
        print('4....')
        time.sleep(1)
        print('5....')
        time.sleep(1)
        print('6.....')
        time.sleep(1)
        print('7.......')
        time.sleep(1)
        print('8........')
        time.sleep(1)
        print('9.........')
        time.sleep(1)
        print('10.........')
        res = func(*args,**kwargs)
        return res
    return wrapper

@say_hi
@time_recode
@say_ya
def func():
    print('苍老师,初次见面,请多关照')

func()

7.ATM + 购物车
https://www.cnblogs.com/xiaoyuanqujing/articles/11640785.html

猜你喜欢

转载自www.cnblogs.com/zhulipeng-1998/p/11852347.html