Python自学笔记---8.函数作为对象与闭包函数

函数在Python中可以被当作参数传递给其他函数,可以放在数据结构中,以及作为函数的返回值。
闭包是由函数及其相关的引用环境组成的实体,即—>闭包 = 函数 + 引用环境

请看下面这个实例:(摘自《Python参考手册》)

def callf(func):
    return func() #将一个函数作为返回值

def helloworld():
    return "hello world"

str1 = callf(helloworld) #传递一个函数作为参数
print(str1)

将函数当作数据处理时,它将隐式的携带与定义该函数的周围环境相关的信息。这将影响到函数中自由变量的绑定方式。
这句话怎么理解呢?我们先看下面这个例子

# foo.py
x = 42
def callf(func):
    return func()

# function.py
import foo
def helloworld():
    x = 13
    return x

str1 = foo.callf(helloworld)
print(str1)  #打印值为13

在这个例子中,helloworld函数使用的x是与它相同环境中定义的。因此即使foo.py中也定义了一个变量x,但在helloworld中调用的是其自身局部环境中声明的x变量。可以将其理解为c语言中在foo.py中 定义了一个 static x(限定其作用域在foo.py文件中)

将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象成为闭包

我对闭包和Python函数的作用域想了几天都没总结出什么值得借鉴的东西,最后还是觉得先放下,等后面用的多了,这部分内容自然就通了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值