美文网首页
python闭包

python闭包

作者: 吱吱菌啦啦 | 来源:发表于2022-04-14 18:17 被阅读0次
先理解一下函数的引用与调用
# 先定义一个函数cc
def cc():
    print("测试一下")

# 函数调用,打印的是内存地址
print(cc)

# 函数赋值,把函数cc对象赋值给变量zz,此时打印变量,打印的是内存
zz = cc
print(zz)
# 再赋值一次,此时打印变量,依然打印的是内存
jj = cc
print(jj)

# 引用函数,打印的是函数cc()的结果
jj()

打印结果:

<function cc at 0x10cf58160>
<function cc at 0x10cf58160>
<function cc at 0x10cf58160>
测试一下
闭包
  • 函数套函数,内部函数对外部函数的引用
  • 无法对外部函数的局部变量进行修改
# 外函数
def grade(grade):
  # 内函数
    def output_students(name, gender):
        print(f"姓名{name}, 性别{gender},年级{grade}")
    # 闭包概念内部调用外部,如果不return,内部函数output_students无法调用;这里return 的是函数output_students()的内存地址
    return output_students 

# 调用外层函数,grade()指向output_students
info = grade("一年级") 
# 这里打印的是内函数的内存地址
print(info) 
# 引用grade()函数,打印结果
info("zz", "女") 
# 引用grade()函数,打印结果
info("cc", "男") 

打印结果

<function grade.<locals>.output_students at 0x103567e50>
姓名zz, 性别女,年级一年级
姓名cc, 性别男,年级一年级

题目:求这段代码的输出结果

def adder(x):
    def wrapper(y):
        return x + y
    return wrapper
adder5 = adder(5)
print(adder5(adder5(6)))

解析:
闭包过程:
1.一个函数(外函数)内部定义了一个函数(内函数)
2.内函数调用了外函数的变量
3.并且外函数的返回值是内函数的引用
所以,adder5=adder(5),x=5,adder返回值为wrapper
adder5(6),此时wrapper(6),y=6,所以值为11
adder5(adder5(6)),同理,adder5(adder5(6))变成了adder5(11),y=11,所以值为11+5=16

相关文章

  • python闭包学习

    参考文章 python闭包python闭包一步一步教你认识Python闭包深入浅出python闭包

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • python高级之闭包

    python高级之闭包 什么是闭包? 闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结...

  • Python 中的闭包

    Python 中的闭包:+ http://python.jobbole.com/82296/

  • python之理解闭包和装饰器

    python之理解闭包和装饰器 1、闭包函数 1.1 python中函数都是对象 结果: 上面定义一个shut函数...

  • 闭包

    浅谈 python 的闭包思想 首先 python的闭包使用方法是:在方法A内添加方法B,然后return 方法B...

  • 2018-11-20

    python函数的闭包 闭包: 嵌套函数调用外部函数的变量 注意: 闭包必须是内部函数调用外部函数定义的变量,这其...

  • Python 入门之 闭包

    Python 入门之 闭包 1、闭包 (1)在嵌套函数内使用(非本层变量)和非全局变量就是闭包 (2)_ clos...

  • Python装饰器(Decorator)完全指南-基础篇

    Decorator基本指南 前提知识 Python中的闭包(closure) 所谓闭包,指的是附带数据的函数对象。...

网友评论

      本文标题:python闭包

      本文链接:https://www.haomeiwen.com/subject/wpxxertx.html