Python-工厂函数

734 阅读1分钟
  • 闭合(closure)或者工厂函数,一个能记住嵌套作用域的变量值的函数,尽管那个作用域不存在了.
  • 例如:

>>> def maker(N):
	def action(X):
		return X**N
	return action

>>> f=maker(2)
>>> f
<function maker.<locals>.action at 0x000001C1D5BF63A8>
>>> f(3)
9
>>> f(4)
16
>>> 

定义了一个外部的函数,这个函数简单的生成并返回一个嵌套的函数,却并不调用这个内嵌的函数,如果我们调用外部的函数,他将会调用内嵌的函数,也就是说maker函数内部的名为action的函数,这一部分 不一样的是,内嵌函数记住了整数2,即maker函数内部的变量N的值,尽管在调用执行f的maker已经返回值并退出,实际上,在本地作用域内的N当做执行的状态信息保留了下来,我们返回其参数的平方运算. 继续看下面的例子:

>>> g=maker(3)
>>> g(3)
27
>>> f(3)
9
>>> 

工厂函数的每次调用,都得到了自己状态信息的集合,如例所示:g函数记住了3,f记住了2,因为每个函数都有自己的状态信息由maker中的变量N保持.