Python中使用lambda获取秒级时间戳遇重复返回旧值问题
Python中使用lambda获取秒级时间戳遇重复返回旧值问题
嘿,这个问题我太熟悉啦!咱们先揪出问题根源:
你把Now_ = NowS()定义成了类的属性,这意味着这个时间戳在类被加载的那一刻就已经固定下来了——也就是程序启动或者这个类第一次被导入的时候,之后不管你隔多久调用post方法,self.Now_都会一直用最开始那个旧值,根本不会重新计算当前时间。
那怎么改呢?给你几个简单好用的方案:
方案1:在请求方法内实时计算
把时间获取逻辑放到post方法里,这样每次处理请求时都会重新获取当前时间戳:
from datetime import datetime from rest_framework.views import APIView NowS = lambda : round(datetime.now().timestamp()) class api_REMITTANCE_(APIView): def post(self, request): # 每次请求时才计算最新时间戳 now_ = NowS() return_serial = {"status_" : "OK_","time": now_} return Response(return_serial) # 记得返回DRF的Response对象哦
方案2:用@property实现动态属性
如果还是想保留self.Now_的调用方式,可以把它改成动态属性,每次访问都会重新计算:
from datetime import datetime from rest_framework.views import APIView class api_REMITTANCE_(APIView): @property def Now_(self): return round(datetime.now().timestamp()) def post(self, request): return_serial = {"status_" : "OK_","time": self.Now_} return Response(return_serial)
小建议
其实这里用lambda有点没必要,直接定义普通函数可读性更强:
def get_current_timestamp(): return round(datetime.now().timestamp())
这样修改后,每次调用接口都会返回最新的时间戳啦~
备注:内容来源于stack exchange,提问作者rahim
相关产品推荐
相关产品推荐

