闭包的本质是函数
闭包条件:
1.嵌套函数定义
2.内部函数使用外部函数中定义的值
3.外部函数一定要有返回值,返回内部函数名
说明:
1.外部函数的局部变量不会随外部函数结束而消失
2.在内部函数中不能修改外部函数的变量 认为是又声明了一个变量
3.要修改外部函数变量就使用nonlocal 来声明变量再进行修改
def FunOut(num1):
def FunIn(num2):
nonlocal num1
num1=1000
return num1+num2
return FunIn
a=10
b=100
f=FunOut(a)
f2=f(b)
print(f2)
test=f(200)
print(test)
print("********"*15)#使用闭包来计算两点之间的距离
import math
def getout(x1,y1):
def getin(x2,y2):
return math.sqrt((x1-x2)**2+(y1-y2)**2)
return getin
f=getout(0,0)
test1=f(10,10)
test2=f(20,20)#因为外部函数变量仍存在 可以直接再次调用
test3=f(30,30)
print("%.2f\n%g\n%g"%(test1,test2,test3))