函數(shù)是python中一個(gè)很基礎(chǔ)的使用,最近不小心,犯了一個(gè)錯(cuò),記錄一下
- 代碼如下
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()
- 運(yùn)行結(jié)果
1550580139
1550580139
1550580139
1550580139
1550580139
按預(yù)想延時(shí)1秒获高,得到的時(shí)間戳應(yīng)該是遞增的,但是得到的結(jié)果全都是一樣
問題出在了,函數(shù)形參里面的時(shí)間戳獲取上面,獲取時(shí)間戳的函數(shù)并沒有每次都執(zhí)行
函數(shù)進(jìn)行去調(diào)用執(zhí)行的時(shí)候形參只初始化一次,所以a的值一直是第一次的值
- 若想如愿,多次調(diào)用即可
代碼如下
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()
- 運(yùn)行結(jié)果
1550581296
1550581297
1550581298
1550581299
1550581300