ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python的闭包

2021-03-09 19:03:47  阅读:143  来源: 互联网

标签:闭包 函数 Python inner func out num1


闭包的形成条件:

  1. 函数嵌套
  2. 内部函数使用外部函数的变量或者参数
  3. 外部函数返回内部函数。这个使用外部函数变量的内部函数称为闭包

按照容易理解的意思分析一下

  1. func_out()的返回值是func_inner函数,所以func指代的就是func_inner函数
  2. 调用func函数,实际上调用的是func_inner函数
  3. 内部函数func_inner使用了外部函数func_out的变量num1,并且func_out的返回值是func_inner,形成了闭包
  4. 输出——结果: 15
def func_out():
    num1 = 10
    def func_inner(num2):
        num = num1 + num2
        print('结果:',num)
    return func_inner

# 创建闭包对象
func = func_out()
func(5)

# 结果: 15

分析:

  1. Person(name)返回值是speak,Tom指代的就是speak
  2. 调用Tom(arg)实际调用speak(arg),此时外部函数name参数值为Tom
  3. 则输出——Tom:我是你哥哥
  4. Jerry请自行理解
def person(name):
    def speak(msg):
        print(name+':'+msg)
    return speak

Tom = person('Tom')
Jerry = person('Jerry')

Tom('我是你哥哥')
Jerry('我是老鼠,你是猫')

修改闭包外部函数的变量值

def func_out():
    num1 = 10
    def func_in():
        # 直接给num1赋值其实是在内部函数的定义了一个新的局部变量num1,而不是使用了外部函数变量
        # 要修改闭包外部函数变量使用nonlocal关键字
        nonlocal num1
        num1 = 20
        num = num1 + 10
        print('结果:',num)
    return func_in

func = func_out()
func()

标签:闭包,函数,Python,inner,func,out,num1
来源: https://www.cnblogs.com/codegzy/p/14507390.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有