初識函式 裝飾器

2022-03-03 22:02:19 字數 2045 閱讀 6897

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