建立裝飾器, 要求如下:import time
import functools
def add_log(fun):
@functools.wraps(fun)
start_time = time.time()
res = fun(*args,**kwargs)
end_time = time.time()
fun.__name__,end_time - start_time,res))
return res
@add_log
def add(x,y):
time.sleep(1)
return x+y
print(add(1,10))
# print(time.ctime())
判斷是否為root使用者,如果是,進行函式操作,不是,報錯
編寫裝飾器required_ints, 條件如下:import functools
import inspect
def is_root(fun):
@functools.wraps(fun)
#inspect.getcallargs返回值是字典,key值為:形參,value值為:形參對應實參
inspect_res = inspect.getcallargs(fun,*args,**kwargs)
print('inspect_res的返回值為:%s' %inspect_res)
if inspect_res.get('name') == 'root':
res = fun(*args,**kwargs)
return res
else:
print('not root user')
@is_root
def add_student(name):
print('新增學生資訊...')
def del_student(name):
print('刪除學生資訊...')
add_student('westos')
1). 確保函式接收到的每乙個引數都是整數; # 如何判斷變數的型別?
type(s), isinstance(s,str)
2). 如果引數不是整形數, 丟擲異常raise typeerror(「引數必須為整形」)
編寫裝飾器required_types, 條件如下:# print(isinstance(1,int))
# print(isinstance(1.0,float))
# print(isinstance('a',str))
# if not isinstance(1,int):
# raise typeerror("引數必須為整形")
# def add(*args,**kwargs):
# return sum(args + kwargs.values())
## print(add(1,2,3,65,67,1.0,a=1,b=2))
import functools
def required_ints(f):
@functools.wraps(f)
for arg in args + tuple(kwargs.values()):
if not isinstance(arg,int):
raise typeerror('引數必須為整形')
else:
return f(*args,**kwargs)
@required_ints
def add(*args,**kwargs):
return sum(args + tuple(kwargs.values()))
print(add(1,2,3,65,67,5,a=1,b=2))
1). 當裝飾器為@required_types(int,float)確保函式接收到的
每乙個引數都是int或者float型別;
2). 當裝飾器為@required_types(list)確保函式接收到的每乙個
引數都是list型別;
3). 當裝飾器為@required_types(str,int)確保函式接收到的每
乙個引數都是str或者int型別;
4). 如果引數不滿足條件, 列印 typeerror:引數必須為***x類
型
# import functools
## def required_types(*kinds):
# def required_ints(f):
# @functools.wraps(f)
# for arg in args:
# if not isinstance(arg,kinds):
# print('typeerror:引數必須為',kinds)
# break
# else:
# res = f(*args,**kwargs)
# return res
# return required_ints
## @required_types(float,int,list)
# def add(a,b):
# return a + b
## print(add(1.1,[1,2,3]))
Python裝飾器練習
看廖下廖大的裝飾器的文件 寫了練習 設計乙個decorator,它可作用於任何函式上,並列印該函式的執行時間 coding utf 8 import time,functools def metric fn time1 time.time ret fn args,kw time2 time.time...
python裝飾器練習
判斷是否是root使用者 def hahaha fc def woshinima args if args 0 root args是列表,儘管只有乙個元素,但是必須是 0 return fc args print error return woshinima hahaha def add stude...
python裝飾器練習
裝飾器的初步使用 需求 1.登入京東 2.有3個頁面home finance book 3.檢測有沒有登入,沒登入呼叫登入介面 4.home使用京東自己的登入 auth type jingdong def login auth type,flag false deflogged f def hadl...