Python闭包
定义
闭包(closure)即在函数中又有函数的定义,例如:
def fun1(str): print("this is fun1 str") def fun2(str1): print("this is fun2 str and parameter from fun1 %s" %str1) fun2(str) fun1('test')
作用域
作用域与def所在层级相同
作用
可以根据不同的配置信息得到不同的结果
def line_conf():
b = 15
def line(x):
return 2*x+b
return line # return a function object
b = 5
my_line = line_conf()
print(my_line(5))
print(my_line(3))
因为函数是一个对象,所以也可以作为函数的返回值。这里line_conf的返回值就可以是line函数。这里可以对my_line赋不同的值,就可以得到不同的结果。看起来也没啥好处,我同样也可以在外面定一个line函数,然后在line_conf中调用就可以了。只是不能返回line函数而已。从功能上看是没啥区别。不同的是,如果是闭包,他是可以直接调用line_conf中的变量的,这称为闭包的环境变量 一个函数和他的环境变量打包在一起就称为闭包(closure)
实例
def line_conf(a, b): def line(x): return ax + b return line line1 = line_conf(1, 1) line2 = line_conf(4, 5) print(line1(5), line2(5))
这里一个函数就定义了一组曲线,该曲线形如$ y = ax + b$
。在配置完a , b两个参数后,该函数的形式就确定了下来。后面的line就只需要给一个参数就行了。也就是说,环境变量确定下来了,只需要给函数很少的参数就可以了。如果没有闭包,我们只能用函数完成,这个函数每次都得传递a , b , x的值才能得到y的值。这样增加了程序开销,也不利于程序的移植。