裝飾器: 定義:本質就是函數,(裝飾其它函數),就是為其它函數添加附加功能。 原則:1.不能修改被裝飾的函數的源代碼。 2.不能修改被裝飾的函數的調用方式。(被修飾函數感知不到) 實現裝飾器知識儲備: 函數即"變數" 高階函數 A:把一個函數名,當做形參傳給另外一個函數。 B:返回值中包含函數名 D... ...
裝飾器:
定義:本質就是函數,(裝飾其它函數),就是為其它函數添加附加功能。
原則:1.不能修改被裝飾的函數的源代碼。
2.不能修改被裝飾的函數的調用方式。(被修飾函數感知不到)
實現裝飾器知識儲備:
- 函數即"變數"
- 高階函數
- 嵌套函數
- 高階函數+嵌套函數==裝飾器
- 高階函數
- 什麼是高階函數?
- 1、把一個函數名當做實參傳給另外一個函數
- 2、返回值中包含函數名
Def bar():
Def test1(func):
Print(func)
- 嵌套函數
高階函數+嵌套函數=裝飾器
- 匿名函數直接保存在記憶體中,使用完後,直接回收掉。Lambda X:X*3
- 函數就是"變數",就是把函數體保存在記憶體中。
X=1
Lambda X:X*3
解釋:當x=1時,在記憶體中放置門牌號x,匿名函數則沒有門牌號,直接在裡面保存值,匿名函數在使用完畢後,直接清空。一般函數則不會,如果要刪除它,只是刪除門牌號,裡面的值則不會,直到記憶體時鐘自動到時刷新找不到值的門牌號時,才會自動清除它。
裝飾器詳解
原則:
- 封閉:已實現的功能代碼塊不應該被修改
- 開放:對現有功能的擴展開放
Lambda匿名函數
非固定參數*args,**kwargs
__author__ = 'wangpeng'
user_status = False#當用戶登錄了就改為True
def login(func):
def inner(*args,**kwargs):#再定義一層函數。
user_name="wph1028"
user_password="abc123"#資料庫文件
global user_status#定義全局變數
if user_status==False:
name=input("pelase your name:")
password=input("please your password:")
if name==user_name and password==user_password:
print("welcome login!")
user_status=True
else:
print("invalibal name or password!")
if user_status==True:
func(*args,**kwargs)
return inner
@login
def index():
print("shouye page")
#@login
def film():
print("film page")
#@login
def music():
print("music page")
index()
film()
music()
*總結:對於裝飾器,還是不太明白,先放過吧,以後再加強。