Python 多個裝飾器以及練習

2021-09-25 05:43:16 字數 1599 閱讀 6917

多個裝飾器執行順序:

從上往下執行

def decorator_a(fun):  #裝飾器a

print('get in decorator_a')

def inner_a(*args,**kwargs): #裝飾器內部函式

print('get in inner_a')

return fun(*args,**kwargs)

return inner_a

def decorator_b(fun): #裝飾器b

print('get in decorator_b')

def inner_b(*args,**kwargs): #裝飾器內部函式

print('get in inner_b')

return fun(*args,**kwargs)

return inner_b

@decorator_a

@decorator_b

def f(x):

print('get in f')

return x * 2

print(f(2))

能登陸系統的使用者在列表中,首先判斷使用者是否可登陸,再判斷使用者是否為root,是否可以向系統中新增學生資訊。

import functools

import inspect

login_tables = ['root','admin','westos']

def is_admin(fun):

@functools.wraps(fun)

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

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

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

res = fun(*args,**kwargs)

return res

else:

print('permission denied!')

def login(fun):

if args[0] in login_tables:

res = fun(*args,**kwargs)

return res

else:

print('error:無此使用者')

@login

@is_admin

def add_student(name):

print('新增學生資訊')

def del_student(name):

print('刪除學生資訊')

add_student('root')

執行結果如下:

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