Python中函数参数默认值的问题

这两天项目中遇到一个很奇怪的问题,每次取当日的访问次数(Redis有缓存),页面上第二天显示都未清零,利用shell在服务器上调用方法并未找到问题,但项目重启后调用次数获取正常。

一开始还以为是nginx对页面有缓存导致的未清零,但难以解释为什么每次第二天后这个问题会重现,而且另一处获取近七日调用曲线图的地方的数据是正常的。

反复对比两个方法后,发现可能是函数的参数传默认值的问题,函数声明如下:

def get_day_count(api_id, app_id, time=datetime.now()):
    pass

后来经过验证,确实是参数默认值的问题,因为函数是在项目启动时“编译”的,所以默认值的datetime.now()是项目启动的时间,并不会随着当前日期的变化而变化,这也解释了为什么项目重启了之后就能正常获取当日调用次数的问题了。

验证过程如下:

def test(now=datetime.now()):
    return now
>>> datetime.now()
>>> datetime.datetime(2018, 10, 19, 10, 38, 46, 962288)
>>> t = test()
>>> t
>>> datetime.datetime(2018, 10, 19, 10, 35, 36, 855706)

所以以后在使用参数默认值的时候,要多加注意啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值