python 裝飾器練習

2021-09-10 10:49:17 字數 2896 閱讀 9424

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使用者,如果是,進行函式操作,不是,報錯

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')

編寫裝飾器required_ints, 條件如下:

1). 確保函式接收到的每乙個引數都是整數; # 如何判斷變數的型別?

type(s), isinstance(s,str)

2). 如果引數不是整形數, 丟擲異常raise typeerror(「引數必須為整形」)

# 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))

編寫裝飾器required_types, 條件如下:

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...