帶引數的裝飾器

2021-10-02 11:27:33 字數 919 閱讀 8802

#!/usr/bin/python3

from inspect import signature

def check_type(*ty_args, **ty_kwargs):

# 通過signature方法,獲取函式形參:name, age, height

sig = signature(func)

# 獲得裝飾器傳來的引數, 函式簽名與之繫結,字典型別

bind_types = sig.bind_partial(*ty_args, **ty_kwargs).arguments

print(bind_types)

# 給執行函式中具體的實參進行和形參進行繫結,形成字典的形式

func_type = sig.bind(*args, **kwargs).arguments.items()

print(func_type)

# 迴圈形參和實參字典的items()形式

for name, obj in func_type:

if name in bind_types:

if not isinstance(obj, bind_types[name]):

raise typeerror('%s must be %s' % (name, bind_types[name]))

func(*args, **kwargs)

# 通過裝飾器實現對函式引數進行型別檢查

@check_type(str, int, float)

def func(name, age, height):

print(name, age, height)

if __name__ == '__main__':

func('bei_men', 18, 1.75)

```python

裝飾器帶引數

裝飾器帶引數 帶引數的裝飾器是三層的 最外層的函式負責接受裝飾器引數 裡面的內容還是源裝飾器的內容 def outer a 第一層 負責接受引數的 defdecorate func 第二層 負責接受函式的 def wargs,kwargs 第三層 負責接受函式的引數 func wargs print...

裝飾器 帶引數

如果明白裝飾器的原理那麼帶引數的裝飾器就很容易理解了 def s1 func definner a,b f1 inner a,b 接受2個引數,然後在把2個引數傳遞給func a,b print hello r func a,b print word return r return inner s1...

帶引數的裝飾器

一 帶引數的裝飾器 import functools import time def log kind def add log fun functools.wraps fun start time time.time res fun args,kwargs end time time.time ki...