装饰器:
定义:本质就是函数,(装饰其它函数),就是为其它函数添加附加功能。
原则:1.不能修改被装饰的函数的源代码。
2.不能修改被装饰的函数的调用方式。(被修饰函数感知不到)
实现装饰器知识储备:
- 函数即"变量"
-
高阶函数
A:把一个函数名,当做形参传给另外一个函数。
B:返回值中包含函数名
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()
*总结:对于装饰器,还是不太明白,先放过吧,以后再加强。