国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python如何創(chuàng)建裝飾器時保留函數(shù)元信息

Python如何創(chuàng)建裝飾器時保留函數(shù)元信息

2020-08-09 14:56D Python

這篇文章主要介紹了Python如何創(chuàng)建裝飾器時保留函數(shù)元信息,文中講解非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下

問題

你寫了一個裝飾器作用在某個函數(shù)上,但是這個函數(shù)的重要的元信息比如名字、文檔字符串、注解和參數(shù)簽名都丟失了。

解決方案

任何時候你定義裝飾器的時候,都應該使用 functools 庫中的 @wraps 裝飾器來注解底層包裝函數(shù)。例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import time
from functools import wraps
def timethis(func):
  '''
  Decorator that reports the execution time.
  '''
  @wraps(func)
  def wrapper(*args, **kwargs):
    start = time.time()
    result = func(*args, **kwargs)
    end = time.time()
    print(func.__name__, end-start)
    return result
  return wrapper

下面我們使用這個被包裝后的函數(shù)并檢查它的元信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> @timethis
... def countdown(n):
...   '''
...   Counts down
...   '''
...   while n > 0:
...     n -= 1
...
>>> countdown(100000)
countdown 0.008917808532714844
>>> countdown.__name__
'countdown'
>>> countdown.__doc__
'\n\tCounts down\n\t'
>>> countdown.__annotations__
{'n': <class 'int'>}
>>>

討論

在編寫裝飾器的時候復制元信息是一個非常重要的部分。如果你忘記了使用 @wraps , 那么你會發(fā)現(xiàn)被裝飾函數(shù)丟失了所有有用的信息。比如如果忽略 @wraps 后的效果是下面這樣的:

?
1
2
3
4
5
6
>>> countdown.__name__
'wrapper'
>>> countdown.__doc__
>>> countdown.__annotations__
{}
>>>

@wraps 有一個重要特征是它能讓你通過屬性 __wrapped__ 直接訪問被包裝函數(shù)。例如:

?
1
2
>>> countdown.__wrapped__(100000)
>>>

__wrapped__ 屬性還能讓被裝飾函數(shù)正確暴露底層的參數(shù)簽名信息。例如:

?
1
2
3
4
>>> from inspect import signature
>>> print(signature(countdown))
(n:int)
>>>

一個很普遍的問題是怎樣讓裝飾器去直接復制原始函數(shù)的參數(shù)簽名信息, 如果想自己手動實現(xiàn)的話需要做大量的工作,最好就簡單的使用 @wraps 裝飾器。 通過底層的 __wrapped__ 屬性訪問到函數(shù)簽名信息。

以上就是Python如何創(chuàng)建裝飾器時保留函數(shù)元信息的詳細內(nèi)容,更多關(guān)于Python保留函數(shù)元信息的資料請關(guān)注服務器之家其它相關(guān)文章!

原文鏈接:https://python3-cookbook.readthedocs.io/zh_CN/latest/c09/p02_preserve_function_metadata_when_write_decorators.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 激情欧美一区二区免费视频 | 欧美日韩精品一区二区在线播放 | 日本一区二区在线观看视频 | 精品美女久久久 | 亚洲精品一区二区三区不 | 久草免费在线视频 | 日本一区二区在线视频 | 亚洲免费在线视频 | 天天艹| 国产一区二区三区在线观看网站 | 99精品欧美一区二区蜜桃免费 | 日韩电影一区 | 久草av在线播放 | 黄色影视| 一级黄色录像在线观看 | 久久精品夜夜夜夜夜久久 | 毛片哪里看 | 中文字幕在线观看一区二区三区 | 婷婷久久五月天 | 国产美女精品一区二区三区 | 欧美日韩精品一区二区公司 | 日日摸夜夜添夜夜添特色大片 | 日本不卡高字幕在线2019 | 亚洲精品乱码 | 国产精品久久久久久久久久久久 | 亚洲精品视频免费观看 | 欧美一区二区黄 | 狠狠操操 | 国产一区精品电影 | 免费国产一区 | 久久中文精品 | 亚洲精品久久久久999中文字幕 | 国产成人av一区 | 午夜免费视频 | 国产欧美日韩综合精品一区二区 | 91视频导航| 成人精品一区二区三区中文字幕 | 久久精品国产亚洲 | 久草天堂| 亚洲精品影院 | 国产精品久久久久久久9999 |