最近在研究 python 修饰函数,虚心请教如下问题。废话不说,先上代码:
import time
from datetime import datetime
from datetime import timedelta
def time_func(time_interval, default=None):
def decorator(func):
func.__last_run = datetime.min
def guard(*args, **kwargs):
now = datetime.now()
if now - func.__last_run >= time_interval:
func.__last_run = now
return func(*args, **kwargs)
elif default is not None:
return default(*args, **kwargs)
return guard
return decorator
if __name__ == "__main__":
@time_func(timedelta(seconds=4),None)
def add():
print('test')
add()
add()
执行结果:
只显示一个'test'
问题:
这个代码实现了在规定时间内( time_interval )限制了函数 add ()的运行次数,只让它运行一次,其余忽略。
请问此代码中为何在执行第二遍 add()的时候跳过了开头的 func.__last_run = datetime.min 而直接进入 guard 中的代码?该怎样理它的解运作原理?
Python 新手,十分感谢!