标签:局部变量 关键字 报错 闭包 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]
标签:局部变量 关键字 报错 闭包 pre 作用 变量 out 场景
原文地址:https://www.cnblogs.com/lz-tester/p/9800613.html