zoukankan      html  css  js  c++  java
  • 网络编程-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]
  • 相关阅读:
    验证码
    SQL给字段加上统一的某个字符
    科讯CMS V9标签清单
    需要重新启动计算机.必须重新启动计算机才能安装 SQL Server
    父页面iframe自动适应子页面的宽高度
    div随另一个div自动增高
    让图片在DIV中垂直居中
    nginx default server
    zabbix proxy 分布式监控
    openjdk tomcat 安装
  • 原文地址:https://www.cnblogs.com/lz-tester/p/9800613.html
Copyright © 2011-2022 走看看