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

Posted 上海小盖伦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程-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]

 




















以上是关于网络编程-Python高级语法-闭包的主要内容,如果未能解决你的问题,请参考以下文章

Python深入04 闭包

理解Python中的闭包

python 高级语法

Python 闭包

Python深入04 闭包

python闭包