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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,102评论 0 5
  • 函数只定义一次,但可能被执行或调用任意次。JS函数是参数化的,函数的定义会包括一个称为形参的标识符列表,这些参数在...
    PySong阅读 4,290评论 0 0
  • 函数只定义一次,但可能被执行或调用任意次。JS函数是参数化的,函数的定义会包括一个称为形参的标识符列表,这些参数在...
    PySong阅读 2,586评论 0 0
  • 一、论思考的重要性 曾子曰:“吾日三省吾身,为人谋而不忠乎?与朋友交而不信乎?传不习乎?” 三省吾身这句话...
    雪之沙阅读 3,365评论 0 2
  • 最近,台湾美女作家林亦含自杀的文章肆虐了各大公众号,读者无不对父母的那种不负责任的教育感到愤怒,对林美女自杀感到惋...
    黑的白的黑阅读 1,430评论 4 4