Python闭包:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
(创建页面,内容为“===Python 闭包===   在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。 *必须有一个嵌套函数(函数内部的函数)。 *嵌套函数必须引用封闭函数中定义的值。 *闭包函数必须返回嵌套函数。 =====一、基本形态===== def outer(x): def inner(y): nonlocal x x+=y return x…”)
 
无编辑摘要
 
第1行: 第1行:
在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。(From Wikipedia)
===Python 闭包===
===Python 闭包===
  在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。
在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。
*必须有一个嵌套函数(函数内部的函数)。
*必须有一个嵌套函数(函数内部的函数)。
*嵌套函数必须引用封闭函数中定义的值。
*嵌套函数必须引用封闭函数中定义的值。

2022年12月29日 (四) 15:48的最新版本

在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。(From Wikipedia)

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)