python函数对象和闭包
2017-04-09 17:12
239 查看
关于函数对象和闭包
闭包(closure)是函数式编程的重要的语法结构。不同的语言实现闭包的方式不同。Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看到Python使用对象来实现一些特殊的语法)。Python一切皆对象,函数这一语法结构也是一个对象。在函数对象中,我们像使用一个普通对象一样使用函数对象,比如更改函数对象的名字,或者将函数对象作为参数进行传递。
一、函数对象:
1、函数可以当参数传递
示例:
#把函数当成参数传递 def foo():#定义foo函数 print('foo') def bar(foo): print(foo)#打印foo的内存地址 foo()#调用foo函数 bar(foo)
执行结果是:
<function foo at 0x00000000022EB8C8> foo
2、函数可以被赋值
示例:
def foo():#定义foo函数 print('foo') print(foo)#输出foo的内存地址 f=foo print(f) f()#即foo()执行foo函数
执行结果是:
<function foo at 0x00000000003F3E18> <function foo at 0x00000000003F3E18> foo
3、把函数当成返回值
示例:
# 把函数当成返回值 def foo():#定义foo函数 print('foo') def bar(foo): print(foo) return foo#将foo作为返回值 f=bar(foo) print(f) f()
执行结果是:
<function foo at 0x0000000001FBB8C8> <function foo at 0x0000000001FBB8C8> foo
4、把函数当做容器类型变量(将函数当做容器类型变量,可随时在主轴线上调用)
示例:
def tell_msg(): msg=''' search:查询 add:添加 delete:删除 change:修改 create:新建 ''' print(msg)
二、闭包:(定义到内部的函数包括对外部作用域的引用,不包括对全局作用域的引用)
判断是否为闭包:
print(f.__closure__),返回值为none的话,则表示不是闭包
print(f.__closure__[0].cell_contents)按照索引的方式返回闭包的值
print(f.__closure__[1].cell_contents)按照索引的方式返回闭包的值
相关文章推荐
- 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包
- Python(2.7.6) 函数对象与闭包
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
- python函数对象与闭包详解
- 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包
- 5.3 Python 函数对象与闭包
- Python中的函数对象与闭包
- Python闭包与函数对象
- 函数:内嵌函数和闭包 - 零基础入门学习Python020
- python 对象拷贝——浅拷贝和深拷贝 之函数传递——值传递还是引用传递?
- Python进阶07 函数对象
- Python进阶07 函数对象
- Python对象类型判断与函数重载
- python 面向对象中一些常用内建函数【getattr(), setattr(). hasattr(). delattr()...】
- python中对象以及一些函数的应用
- Python进阶07 函数对象
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- Python: 为对象动态添加函数,且函数定义来自一个str
- 【转】python 函数闭包
- 根据字符串名称动态调用Python的函数和对象方法