您的位置:首页 > 编程语言 > Python开发

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)按照索引的方式返回闭包的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: