函数对象和闭包

1.函数对象(精髓是可以把函数当成变量去用)

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

1.1 函数可以被引用

def add(x,y):
	return x+y
func = add
func(1,2)
3

1.2可以当做函数的参数传给别的函数

def foo(x):
	print(x)
foo(func)  #foo(func的内存地址)

1.3可以把函数当成一个函数的返回值

def bar():
	return add
func = bar()
func(1,2)
3

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

l=[func,2,3]
l[0]()  #调用函数

2.闭包函数

闭包函数=名称空间与作用域+函数嵌套+函数对象

"包“:函数包含对外层函数作用域名字的引用(不是对全局作用域) 只要是外层的函数,第几层无所谓,但不能是全局作用域

  • 闭包:若内嵌函数包含外部函数作用域(而非全局作用域)中变量的引用,那么该'内嵌函数'就是闭包函数,简称闭包。
  • '闭'代表函数是内部的,'包'代表函数外'包裹'着对外层作用域的引用 ,因而无论在何处调用闭包函数,使用的仍然是包裹在其外层的变量。
原文地址:https://www.cnblogs.com/xiaoxuanworking/p/14350980.html