闭包是函数嵌套,内部函数引用外部函数变量,又返回了那个内部函数
def funcation_out(num1):
print('外部函数开始,他传了一个变量%d' % num1)
def funcation_in(num2):
result = num1 + num2
print('内部函数开始了,他返回一个变量%d' % result)
return result
return funcation_in
# 把外部函数的返回函数赋值给变量infunc 这时infunc变成一个函数
infunc = funcation_out(10)
# 打印结果,发现10+20 调用外部函数传10,内部函数传20此时内部函数计结果返回
print(infunc(20))
# 再次调用返回的函数
print(infunc(50))
闭包在函数式开发过程中使用,可根据外部作用域的局部变量得到不同结果
使用案例:求一个点到其它点之间的距离
不使用闭包完成需要四个参数
计算两点之间的距离需要用到pow计算一个数的平方,sqrt开平方,这两个函数在math数学库中
def disbtwpoint(x1, y1, x2, y2):
return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2))
print(disbtwpoint(0, 0,10,10)) # 14.142135623730951
print(disbtwpoint(0, 0,20,20)) # 14.142135623730951
# 使用闭包算一次两点间距离
def disout(x1,y1):
def disin(x2,y2):
return sqrt(pow(x1-x2,2)+pow(y1-y2,2))
return disin
# 闭包调用
getdis=disout(0,0)
# 获取点10,10到坐标0,0的距离
print(getdis(10,10))
# 此时可再次计算另外一个坐标与0,0间的距离
print(getdis(20,20))