网络编程-Python高级语法-闭包

什么叫闭包?通俗来说就是函数里嵌套函数,从表现形式来看,内部函数引用外部函数的作用域里的变量,那么内部函数就称为闭包

举例说明:

1、闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境

def outer(x):
    def innner(y):
        return x+y
    return innner
a = outer(1)  # 调用outer函数返回内部函数inner返回的的函数变量
print(a(2))  # 通过函数变量传参并运行内部函数,然后返回函数结果
运行结果:3

2、闭包不可以直接访问外部函数作用域的变量

def outer1():
    x = 2
    def inner1():
        x *=x
        return  x
    return inner1
print(outer1()())
运行之后会报错,因为inner1内部不能直接调用外部函数的变量,但是通过下面修改就可以了

def outer1():
  nolocal x # 通过nolocal关键字来指定x不是闭包的局部变量
  x=2
  def inner1():
    x*=x
    return x
  return inner1
print(outer1()())
运行结果:4

3、实际应用场景举例

ori = [0, 0]  # 坐标原点


def create(pos=ori):  # 传入坐标原点
    def play(derict, step):  # 方向和步长
        new_x = pos[0]+derict[0]*step   # 移动后点的新的x轴值
        new_y = pos[1]+derict[1]*step   # 移动后点的新的y轴值
        # 通过容器修改外部函数的局部变量值
        pos[0] = new_x
        pos[1] = new_y
        return pos
    return play
a = create()
print(a([1, 0],10))
print(a([0, 1], 20))

运行结果:[10, 0]
[10, 20]

 

转载于:https://www.cnblogs.com/lz-tester/p/9800613.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值