码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-16 22:01:31      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:局部变量   关键字   报错   闭包   pre   作用   变量   out   场景   

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

举例说明:

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高级语法-闭包

标签:局部变量   关键字   报错   闭包   pre   作用   变量   out   场景   

原文地址:https://www.cnblogs.com/lz-tester/p/9800613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!