基礎+裝飾器內容
遞歸特性
# 1.必須有一個明確的結束條件
# 2.每次進入更深一層遞歸時,問題規模相比上次遞歸應有所減少
# 3.遞歸效率不高
def run(n):print(n)if int(n/2)>0:return run(n / 2)print("-->",n) run(10)
?
=============================================================
局部變量與全局變量知識
1.全局變量中 數字/字符串不能在函數中修改 列表和字典可以修改
names=["xiao","mibg","ming"] def change():names[0]="cf"print(names) change() print(names)
?
==============================================================
函數即”變量“! (函數名-代表函數地址 || 函數名()-代表調用函數)
高階函數
1 把一個函數名當作實參傳給另一個函數(在不修改被裝飾函數源代碼的情況下為其添加功能)
2 返回值中包含函數名(不修改函數的調用方式)
?
==============================================================
裝飾器
高級函數+嵌套函數==>裝飾器 #嵌套函數-函數套著函數
# 定義:本質是函數,(裝飾其他函數)為其他函數添加附加功能
# 原則: 1.不能修改被裝飾的函數的源代碼
# 2.不能修改被裝飾的函數的調用方式
?
import timeuser,word="cf","123" def auth(auth_type): print("auth_type",auth_type)def out_wrapper(func): def wrapper(*args,**kwargs):if(auth_type=="local"):usename=input("usename:").strip()psword= input("psword:").strip()if(user==usename and psword==word):print("\033[32;1m HI boy \033[0m")func(*args,**kwargs)else:exit("failed")elif(auth_type=="ldap"):func()return wrapperreturn out_wrapper def index():print("index")@auth(auth_type="local") #home=auth(local)==>wrapper() def home():print("home") @auth(auth_type="ldap") def bbs():print("bbs")index() home() bbs()
?