python闭包函数

2021/12/25 22:07:16

本文主要是介绍python闭包函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、闭包函数的概念

闭包 = 一个函数 + 外部封闭的作用域
闭包函数的特征:

  • 函数中嵌套一个函数
  • 外层函数rertun返回 内层函数
  • 内层函数有引用 外部作用域 的非全局变量
def funcB1():
    x = 100

    def funcB2():
        c = x * 2
        print(c)

    return funcB2

# 调用闭包函数 返回的结果就是一个闭包
# 闭包 =  一个函数 +  外部封闭作用域
# 封闭作用域的值在外面是没有办法进行修改的
res = funcB1()

print(res)
res()

# 运行结果
# <function funcB1.<locals>.funcB2 at 0x000001B8B48BC310>
# 200

因为作用域的原因,在函数外部就无法拿到函数中的变量和内部函数。通常我们需要使用函数中的变量时,才去将变量返回的办法。同理,在使用内部函数时,我们也可以将函数名作为返回值返回。 这是闭包最常用的方式。

二、如何判断是否是闭包函数

函数名__closure__ 在函数是闭包函数时,返回一个cell元素;不是闭包时,返回None。
输出cell:

def funcB1():
    x = 100

    def funcB2():
        c = x * 2
        print(c)
        print(funcB2.__closure__)

    return funcB2

# 调用闭包函数 返回的结果就是一个闭包
# 闭包 =  一个函数 +  外部封闭作用域
# 封闭作用域的值在外面是没有办法进行修改的
res = funcB1()
res()

# (<cell at 0x0000027678A1C640: function object at 0x0000027678A0C310>, <cell at 0x0000027678A1CB50: int object at 0x00000276782655D0>)

输出None:

name = 'python'
def func():
    def inner():
        print(name)
    print(inner.__closure__)  # None
    return inner

f = func()
f()

# None
# python


这篇关于python闭包函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程