函数是python中一个很基础的使用,最近不小心,犯了一个错,记录一下
- 代码如下
import datetime
import time
import parsedatetime
import pytz
cal = parsedatetime.Calendar()
tz = pytz.timezone('Asia/Shanghai')
country = 'en'
def now_time():
dt = datetime.datetime.now(tz)
dt = dt.replace()
if country == 'en':
return int(dt.timestamp())
else:
return int(dt.timestamp()) + 8 * 3600
def test_func(a=now_time()):
print(a)
for i in range(5):
time.sleep(1)
test_func()
- 运行结果
1550580139
1550580139
1550580139
1550580139
1550580139
按预想延时1秒,得到的时间戳应该是递增的,但是得到的结果全都是一样
问题出在了,函数形参里面的时间戳获取上面,获取时间戳的函数并没有每次都执行
函数进行去调用执行的时候形参只初始化一次,所以a的值一直是第一次的值
- 若想如愿,多次调用即可
代码如下
import datetime
import time
import parsedatetime
import pytz
cal = parsedatetime.Calendar()
tz = pytz.timezone('Asia/Shanghai')
country = 'en'
def now_time():
dt = datetime.datetime.now(tz)
dt = dt.replace()
if country == 'en':
return int(dt.timestamp())
else:
return int(dt.timestamp()) + 8 * 3600
def test_func(a=now_time):
print(a())
for i in range(5):
time.sleep(1)
test_func()
- 运行结果
1550581296
1550581297
1550581298
1550581299
1550581300