闭包函数
来源:互联网 发布:伦敦金数据网 编辑:程序博客网 时间:2024/06/02 06:59
- 定义:函数内部定义的函数,该函数包含对外部作用域,而不是对全局作用域的应用。
name = 'seb'def func(): name = 'ayhan' def my_name(): # 函数my_name定义在函数func内部,包含了对外部作用域(上一层) name = 'ayhan'的引用 print('我的名字',name) # 相当于函数外包了一层外部作用域(上一层,但不是全局)的关系。 return my_namefunc() # 执行函数,返回my_name函数的内存地址b = func() # 定义全局变量b,指向my_name这个内部函数,使其可以处处被调用print(b) # 打印出my_name函数的内存地址b() # 执行b(),就相当于执行了my_name这个函数,def func2(): name = 'tom' b() # 调用b这个函数(相当于调用了my_name函数)name = 'ronin' # 修改name全局变量func2() # 打印结果仍然不变,始终从函数的定义处的上一层来找到 name= 'ayhan'# 即包含对外部作用域,而不是对全局作用域的引用。因此my_name是一个闭包函数运行结果:<function func.<locals>.my_name at 0x000001E8B7BFEA60>我的名字 ayhan我的名字 ayhan查看函数是否是闭包函数:
print(b.__closure__)
(<cell at 0x000001E8B5CA0C48: str object at 0x000001E8B7BFBA78>,)
- 特点:
- 自带作用域,只找本体外面包的那一层(或再上一层),就是不到全局作用域。
- 延迟计算(惰性计算),只拿到了函数的内存地址,加()才执行
- 原本只在函数内部定义和执行的函数,实现全局调用,注意:
函数的作用域关系在函数定义阶段就已经固定,与调用位置无关,无论函数在何处调用,都需要回到定义阶段去找对应的作用域关系。 - 闭包函数和return的关系:
不return一样符合闭包函数的定义,但是只能在函数内部使用,不能全局引用,因此闭包函数通常和return一起用。 - 基本形式:
def 外部函数(): 内部函数需要的变量 def 内部函数(): 引用外部变量 return 内部函数
阅读全文
0 0
- 函数和函数闭包
- AS3函数闭包
- 记忆函数+闭包
- return闭包函数
- return闭包函数
- 函数闭包
- js函数闭包
- javascript 闭包 -- 函数
- 匿名函数&闭包
- 笔记-函数闭包
- JS函数闭包
- 函数闭包原理
- [Lua]函数闭包
- 匿名函数 & 闭包
- php闭包函数
- Javascript函数闭包
- 闭包函数
- 函数和闭包
- Excel VBA高效办公应用-第七章-VBA财务报表分析-Part1 (损益表的分析)
- Mybaities一对多注解和xml的实现
- kotlin学习5(字符,字符串,元组)
- 解决Spring MVC 参数乱码问题
- shell入门(二)——面试题实例
- 闭包函数
- 三十行代码写一个最简单的时间轴插件--jquery
- Android 开发 debug 用到的一些adb命令
- java跨平台原理
- ZOJ--1037:Gridland
- 看雪CTF 2017 第六题设计思路和解题思路
- 【Bzoj3196】2B平衡树
- openGL纹理压缩概括
- java中的匿名内部类总结