闭包

闭包的原理:

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包

# 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

确实能够达成一样的目的 但是如果我们想要通过一个函数来达成不同的功能 就可以通过闭包来达到一个中间人转换的效果 这样是不是会更加的方便呢?

自己学习的理解 理解错误 麻烦纠正下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值