裝飾器的練習

2021-09-03 02:44:32 字數 3381 閱讀 7478

1.比如之前所寫的管理員登陸系統,可以加上與使用者之間的判定,這時候就可以用裝飾器來完成

"""

['root','admin','redhat']

在實際的應用場景中,會採用多個裝飾器先驗證是否登陸成功,再驗證許可權是否足夠

"""

import functools

import inspect

def is_admin(fun):

@functools.wraps(fun)

def zjs(*args,**kwargs):

#inspect.getcallargs返回乙個字典,key值:形參 value值:對應的實參

insp_res = inspect.getcallargs(fun,*args,**kwargs)

print('inspect的返回值是:%s' %(insp_res))

if insp_res.get('name')=='root':

res = fun(*args,**kwargs)

return res

else:

print('not root cannot to operate')

return zjs

user_li=['admin','root','sjz']

def is_user(fun):

@functools.wraps(fun)

def ing(*args,**kwargs):

if args[0] in user_li:

res1 = fun(*args,**kwargs)

return res1

else:

print('no, u cannot login')

return ing

@is_user

@is_admin

def add(name):

print('新增資訊')

2.判斷整形裝飾器

"""

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

# 1). 確保函式接收到的每乙個引數都是整數;

# 2). 如果引數不是整形數, 列印 typeerror:引數必須為整形

"""

import functools

def required_ints(fun):

@functools.wraps(fun)

def zjs(*args, **kwargs):

for i in args:

if not isinstance(i, int):

print('typeerror:引數必須為整形')

外加引數裝飾器

前面寫的add_log裝飾器列印函式日誌資訊,如果我們想要再新增資訊的話,就可以用到外加引數裝飾器

如圖:它所列印出的日誌資訊多了這一項,為我們的外加引數

外加引數練習

"""

# 編寫裝飾器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(*types):

def required(fun):

@functools.wraps(fun)

def zjs(*args, **kwargs):

for i in args:

if not isinstance(i, types):

print('函式所有引數並非', types)

python 裝飾器練習

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

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