装饰器 decorators
装饰器的定义
装饰器是一个函数,这函数的主要作用是包装另一个函数或类
包装的目的是在不改变原函数名的情况下改变被包装对象的行为
函数装饰器 function decorators
函数装饰器是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数
示意:
def mydeco(fn): # 装饰函数
def fx():
print("++++++++")
fn()
print("--------")
return fx
@mydeco
def hello():# 被装饰函数
print("hello world")
hello() # 调用者
@后跟的函数就是装饰函数,当执行被装饰函数时,相当于把hello函数作为参数传入mydeco函数中执行fx函数
示意二:
def fun(x):
def fun1():
ret = 10 * 20
x(ret)
return fun1
@fun
def fun2(q):
print(q)
fun2()
一个函数也可以有多个装饰器
列如:
def fun1(fn):
def fx():
print("hi")
fn()
return fx
def fun2(fn):
def fx():
print("hello")
fn()
return fx
@fun1
@fun2
def fun3():
print("小明")
fun3()
当一个函数同时被多个装饰器进行装饰的时候,按照从上到下的顺序依次进行执行
闭包 closure
定义:
将内嵌函数的语句和这些语句的执行环境打包在一起后,得到的函数对象称为闭包
实现闭包必须要满足以下三个条件:
1.必须有一个内嵌函数
2.内嵌函数必须引用外部函数中的变量
3.外部函数返回值必须是内嵌函数
说明
如果一个内嵌函数访问了外部嵌套函数作用域内的变量,则这个内嵌函数就是闭包
示意:
def fun(x):
def fun2():
return 5**x
return fun2
fn=fun(2)
print(fn())