python 函数使用

函数是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

你可能感兴趣的:(python 函数使用)