Python闭包

来自牛奶河Wiki
阿奔讨论 | 贡献2022年12月27日 (二) 17:58的版本 (创建页面,内容为“===Python 闭包===   在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。 *必须有一个嵌套函数(函数内部的函数)。 *嵌套函数必须引用封闭函数中定义的值。 *闭包函数必须返回嵌套函数。 =====一、基本形态===== def outer(x): def inner(y): nonlocal x x+=y return x…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

Python 闭包

  在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。

  • 必须有一个嵌套函数(函数内部的函数)。
  • 嵌套函数必须引用封闭函数中定义的值。
  • 闭包函数必须返回嵌套函数。
一、基本形态
def outer(x):
     def inner(y):
         nonlocal x
         x+=y
         return x
     return inner

a = outer(10)
a(1)
a(1)
二、扩展原函数功能
def deco1(fun1):
    def wrapper():
        print("decorator begin...")
        fun1()
        print("decorator end...")
    return wrapper

@deco1
def fplus():
    print("fplus")

fplus()

带返回值及参数

def deco1(fun1):
    def wrapper(*args, **kwargs):
        print("decorator begin...")
        res = fun1(*args, **kwargs)
        print("decorator end...")
        return res
    return wrapper

@deco1
def fplus(x = 0,y = 0):
    print("fplus")
    return x+y

v1 = fplus(1,2)
print(v1)

带返回值及参数 II

def fplus(x = 0,y = 0):
    print("fplus")
    return x+y

def deco1(fun1):
    def wrapper(*args, **kwargs):
        print("decorator begin...")
        res = fun1(*args, **kwargs)
        print("decorator end...")
        return res
    return wrapper

@deco1
def f(*args, **kwargs):
     return fplus(*args, **kwargs)


v1 = f(1,2)
print(v1)