Python 装饰器的定义和使用,闭包的定义和使用

装饰器 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())

 

 

你可能感兴趣的:(Python 装饰器的定义和使用,闭包的定义和使用)