闭包的原理:
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包
# coding=utf-8
def line_1(k, b):
def line_2(x):
print(k*x+b)
return line_2
q = line_1(2, 3)
q(1)
就这么一段代码 我自己讲下 自己的理解吧
1.首先def一个line_1的函数(需要传参k,b) 当我们 q = line_1(2,3)时,line_1函数被调用 那么会生成一个line_2 然后返回
赋值给a
2.,我们都知道python里面一切皆对象,生成了一个a的对象 然后a指向line_1返回的引用,所以q指向了line_1,然后q(1)再次调用的时候就是调用line_2了
闭包的好处:
代码:
def nth_power(exponent):
def exponent_of(base):
return base ** exponent
return exponent_of # 返回值是 exponent_of 函数
square = nth_power(2) # 计算一个数的平方
cube = nth_power(3) # 计算一个数的立方
print(square(2)) # 计算 2 的平方
print(cube(2)) # 计算 2 的立方
结果:
4
8
你们可能会说那直接这样写也可以达成一样的目的呀!
代码:
def nth_power_rewrite(base, exponent):
return base ** exponent
确实能够达成一样的目的 但是如果我们想要通过一个函数来达成不同的功能 就可以通过闭包来达到一个中间人转换的效果 这样是不是会更加的方便呢?
自己学习的理解 理解错误 麻烦纠正下