函数对象和闭包

函数对象和闭包

一、函数对象

函数对象指的是函数可以被当做“数据”来处理,具体可以分为四个方面的使用。

1.1函数可以被引用

def  add (x,y):

         return x+y


func = add

func(1,2)


1.2函数可以作为容器类型的元素

dic = {“add”:add,”max”:max}


dic[“add”](1,2)


1.3函数可以作为参数传入另外一个函数

def  foo(x,y,func):

         return func(x,y)


foo(1,2.add)


1.4函数的返回值可以是一个函数

def bar():

         return add

func = bar()

func(1,2)


二、闭包函数

2.1闭与包

基于函数对象的概念,可以将函数返回到任意位置去调用,但作用域的关系是在定义完函数时就已经被确定了的,与函数的调用位置无关。




         x=1

         def  f1():

                   deff2 ():

                     print(x)

                   returnf2

         deff3():

            x = 3

            f2 = f1()

            f2()  #调用f1()返回函数f2,

#需要按照函数定义时的作用关系去执行,与调用位置无关



         也就是说函数被当做数据处理时,始终以自带的作用域为准。若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该内嵌函数就是闭包函数。

X = 1

def outer():

         x=2

         def inner():

                   print(x)

         return inner

fuc = outer()

func()   #结果为21


“闭”代表函数是内部的,“包”代表函数外包裹着对外层作用域的引用。在而无论在何处调用闭包函数,使用的仍然是包裹在其外层的变量。


2.2闭包的用途

目前为止,我们得到了两种为函数体传值的方式,一种是直接将值以参数的形式传入,另一种就是将值包给函数。

闭包函数的这种特性有时又称为惰性计算。

你可能感兴趣的:(函数对象和闭包)