python裝飾器之中級篇

2021-08-24 20:59:49 字數 1133 閱讀 3712

# author richard_kong

# !/usr/bin/env python

# --*-- encoding:utf-8 --*--

"""如果函式帶有返回值,怎麼辦?

這就是更高階的裝飾器:

1、帶引數的裝飾器:

@auth(auth_type="local")

此時它是乙個函式,這種情況下 由於帶有括號,會立即執行,但是只要它的返回值是乙個裝飾器就沒問題

2、基於類的裝飾器 和 帶引數的類的裝飾器

什麼是裝飾器呢:

裝飾器:外部函式傳入被裝飾函式名,內部函式返回裝飾函式名

特點:1、不修改被裝飾函式的名稱,2、不修改被裝飾函式的源**

原來的那個函式,而是被裝飾以後的函式

像home = timmer(home)這樣的寫法,python給了我們特定的語法,@語法糖

如果乙個函式被多個裝飾器修飾。那它的執行順序是由下到上

"""def auth(auth_type):

print("auth_type:::",auth_type)

if auth_type=="local":

username = input("please input username:")

password = input("please input password:")

if username == "richard_kong" and password == "abs123":

print("login successful")

func()

else:

exit("username or password is wrong!!")

elif auth_type =="lapd":

print("搞毛線lapd......不會!")

@auth(auth_type="local")

def home(): # home = auth(home)

print("from home !!!")

def abs():

print("from abs!!!")

def login():

print("from abs!!!")

home()

python之裝飾器篇

一.基本裝飾器 基本裝飾器的作用 在不改變原函式的基礎上,通過裝飾器,給原函式新增某些功能 實現方法 在原函式上加 裝飾器名字 其中 叫做語法糖 定義裝飾器 第一層函式傳入引數 用於傳入原函式 第二層使用原函式的同時,加入需要新增的功能 第一層函式要返回第二層函式名 整個函式形成閉包 import ...

python 高階篇 函式裝飾器和類裝飾器

簡單裝飾器 def my decorator func func def greet print hello world greet my decorator greet greet 輸出 hello world上述 在 python 中有更簡單 更優雅的表示 def my decorator fu...

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...