用例:
#闭包的应用
def create(pos):
def game(move_direction,step):
'''
实现点在坐标中移动
:param move_ddirection: 移动方向
:param step: 移动步长
:return:
'''
x=pos[0]+move_direction[0]*step #这里的pos[0]代表x轴初始值位置和move_direction[0]为x轴移动的方向
y=pos[1]+move_direction[1]*step #这里的pos[0]代表y轴初始值位置和move_direction[0]为y轴移动的方向
pos[0]=x #将更新的x轴位置赋值给pos变量的x轴
pos[1]=y #将更新的y轴位置赋值给pos变量的y轴
return pos #返回更新后的坐标位置的函数参数
return game #返回create(pos)的值为game函数名
game=create([10,1]) #设置坐标初始位置
print(game([1,0],2)) #打印移动后的位置
#装饰器的应用
import time
def count(mysums):
mysum=0
for mysum in range(mysums):
mysum+=mysums
def count_time(func): #用于传递调用的函数给装饰器函数
def wrapper(*args,**kwargs): #装饰器,用于包装调用的函数
start_time=time.time() #调用函数前
func(*args,**kwargs) #调用函数
end_time=time.time() #执行完函数后的时间
print(end_time-start_time) #打印执行函数的时间
return wrapper #返回装饰器函数名称
f=count_time(count) #将函数count_time(count)把count函数作为参数传递,同时把返回值wrapper(装饰器函数名称)赋值给变量f
f(10000000) #这个相当于wrapper(1,2),也就是调用装饰器函数,同时把参数传递给被装饰的函数func作为参数使用
# @count_time #使用装饰器,给下面的函数
#创建需要调用的函数
# def count(mysums):
# mysum=0
# for mysum in range(mysums):
# mysum+=mysums
# count(1000000000)
@count_time #这个是调用装饰器的语法,直接使用装饰器,下面写需要装饰的函数就可以了
def count(results):
result=1
for result in range(results):
result*=2
print(result)
count(1000000000)
#通过两个被装饰的函数可以知道,装饰器不需要做任何修改,就可以同时给两个功能不同的函数使用,这个装饰器的作用就是用来计算函数运行的时间,至于是什么函数它不关心,需要就只管调用就可以了,和不用装饰器实现的区别就是,多个函数如果要想使用类似计算运行时间这种功能,需要给每个函数进行条件,如果要把改变功能,需要给每个函数都做修改,而装饰器就不需要,直接对装饰器修改,所有的函数就都会根据改变的功能应用上,无论是使用功能还是修改功能上都极大的节省了时间和代码量