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