利用闭包求两点之间的距离 & 闭包的特殊用途(实现添加日志功能)

【示例】求两点之间的距离(传统方式实现)

import math
def getDis(x1,y1,x2,y2):
	return math.sqrt((x1-x2)**2+(y1-y2)**2)
	
#分别求(1,1)和(2,2)到原点的距离
print(getDis(1,1,0,0))
print(getDis(2,2,0,0))

【示例】求两点之间的距离(闭包方式实现)

import math
#使用闭包求两点之间的距离
def getDisOut(x1, y1):
	def getDisIn(x2, y2):
		return math.sqrt((x1-x2)**2+(y1-y2)**2)
	return getDisIn

#求(1, 1)距离原点(0, 0)的距离
#调用外部函数
getDisIn = getDisOut(0,0)
result = getDisIn(1, 1)
print('(1, 1)距离(0, 0)的距离', result)

#求(2, 2)距离原点(0, 0)的距离
result = getDisIn(2, 2)
print('(2, 2)距离(0, 0)的距离', result)

   闭包的特殊用途,可以在不修改源码的前提下,添加新的功能。

【示例】添加日志功能

#闭包的特殊用途:不修改源代码的前提下, 添加新功能
#添加日志输出信息
import time
def writeLog(func):
	try:
		file = open('writeLog.txt', 'a', encoding='utf-8')
		#向文件中写入日志信息(访问:方法名,时间:XXXX-XX-XX)
		file.write('访问:')
		file.write(func.__name__)
		file.write('\t')
		file.write('时间:')
		file.write(time.asctime())
		file.write('\n')
	except Exception as e:
		print(e.args)
	finally:
		file.close()

def fun1():
	writeLog(fun1)
	print('功能1')

def fun2():
	writeLog(fun2)
	print('功能2')

fun1()
fun2()

【示例】不修改源代码前提下添加日志功能

#闭包的特殊用途:不修改源代码的前提下, 添加新功能
#添加日志输出信息
import time
def writeLog(func):
	try:
		file = open('writeLog.txt', 'a', encoding='utf-8')
		#向文件中写入日志信息(访问:方法名,时间:XXXX-XX-XX)
		file.write('访问:')
		file.write(func.__name__)
		file.write('\t')
		file.write('时间:')
		file.write(time.asctime())
		file.write('\n')
	except Exception as e:
		print(e.args)
	finally:
		file.close()

def fun1():
	#writeLog(fun1)
	print('功能1')

def fun2():
	#writeLog(fun2)
	print('功能2')

#使用闭包,不修改fun1和fun2的功能代码,添加日志信息
def funcOut(func):
	def funcIn():
		writeLog(func)
		func()
	return funcIn

function1 = funcOut(fun1)
function1()
function2 = funcOut(fun2)
function2()

执行结果:

writeLog.txt 文件内容:
在这里插入图片描述终端执行结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值