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函数的作用域想了几天都没总结出什么值得借鉴的东西,最后还是觉得先放下,等后面用的多了,这部分内容自然就通了。

你可能感兴趣的:(Python自学笔记)