系列文章目录
文章目录
一、函数对象
-
含义:
在代码中,一个函数名(不写括号或者其他东西)就代表一个函数对象,如:
print
,其本质上是函数的引用,里面保存的是函数的内存地址,它可以将一个函数当作变量使用。 -
作用:
def foo(): print('我是foo') foo # 这就是一个函数对象 # 函数对象可以赋值给变量 f = foo # 赋值后的变量也可以加 () 调用执行 f() print(foo) # 打印:<function foo at 0x00000000070D4670> # 当作另一个函数的返回值 def bar(): return foo
二、闭包函数(闭包)
-
含义:
若干个函数嵌套,其中:
-
内层函数可以访问外层函数中定义的变量;
-
外层函数返回内层函数的引用,使内层函数可以被外界调用。
那么这个内层函数就是闭包函数。
听上去容易让人迷惑,似乎没什么用。别急,它的特点会在后面讲到。
-
-
格式:
在嵌套函数中,外层函数返回内层函数的对象(不一定是两层嵌套,若干层嵌套都可以)。
def f1(): x = 1 # 被“包裹”的变量 def f2(): pass return f2
-
特点:
-
内层函数永远只访问在外层函数中定义的变量;
-
外层函数中的变量,不会随着函数的结束而被销毁;
-
能够避免外层函数中的变量被修改;
-
会造成内存泄露,外层函数中的变量永远占着内存。
def f1(): x = '1111' def f2(): print(x) return f2 x = '0000' f = f1() # 将f2的函数引用赋值给f,f1中的变量x会被保留下来 f() # 调用f,实际上是调用了f2。打印:1111
-