def inner(*args,**kwargs):
# 執行原函式之前的操作...
ret = func()
# 執行原函式之後的操作...
return ret
return inner
login_status =
def auth(func):
def inner(*args,**kwargs):
if login_status['flag']:
ret = func(*args,**kwargs)
return ret
username = input('請輸入使用者名稱:').strip()
password = input('請輸入密碼:').strip()
if username == 'baoyuan' and password == 'bangbangde':
login_status['flag'] = true
ret = func(*args,**kwargs)
return ret
return inner
@auth
def diary():
def auth(x):
def auth1(func):
def inner(*args,**kwargs):
if dic_flag['flag']:
ret = func()
return ret
if x == 'wechat':
username = input('name')
password = input('pwd')
if username == 'asd' and password == '123':
ret = func()
return ret
if x == 'qq':
username = input('name')
password = input('pwd')
if username == 'asd' and password == '123':
ret = func()
return ret
return inner
return auth1
@auth('wechat')
def jitter():
print('記錄美好生活')
@auth('qq')
def pipefish():
def auth(func):
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return inner
# @auth
def index():
print('index')
print(index)
print(index.__name__)
這裡print(index)執行有兩種情況:
print(index.__name__)
時也有兩種情況:
總結:加上裝飾器之後,其實執行的是inner()函式,只不過這裡的inner()函式沒做任何操作而已。
下面想要在加上裝飾器之後print(index.__name__)
時,還是列印自己的函式名,具體操作如下:
import functools
def auth(func):
@functools.wraps(func)
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return inner
@auth
def index():
print('index')
print(index.__name__)
注意: python 裝飾器 初識
1.函式無引數,無返回值 import time def f1 無引數,無返回值 time.sleep 1 print hello,world def timer f f 是函式名 def inner 閉包 start time.time f end time.time total end star...
函式名應用,閉包,裝飾器初識
一 函式名的應用 函式名是乙個變數,但他是乙個特殊的變數,與括號配合可以執行函式的變數。1 函式名的記憶體位址 def func print 哈哈 print func 結果 2 函式名可以賦值給其他變數 def func print 哈哈 print func a func 把函式當成乙個變數,賦...
函式裝飾器 類裝飾器
一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...