gpt4 book ai didi

将函数作为可选参数的 Python 函数定义

转载 作者:行者123 更新时间:2023-11-30 23:09:50 26 4
gpt4 key购买 nike

我想要一个函数作为可选参数python 中的另一个函数,但我不清楚如何做到这一点。

例如我定义了以下函数:

import os, time, datetime

def f(t=datetime.datetime.now()):
return t.timetuple()

我已经放置了t=datetime.datetime.now()为了使参数是可选的,所以能够不带参数调用 f()

现在,每当我执行 f() 时,我都会得到相同的日期时间 A (根据我的预期,这是错误的),但是每当我执行 f(datetime.datetime .now()) 我得到不同的日期时间(如预期正确)。

例如

>>> f()
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=36, tm_sec=2, tm_wday=5, tm_yday=171, tm_isdst=-1)
>>> f()
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=36, tm_sec=2, tm_wday=5, tm_yday=171, tm_isdst=-1)
>>> f(datetime.datetime.now())
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=37, tm_sec=1, tm_wday=5, tm_yday=171, tm_isdst=-1)
>>> f()
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=36, tm_sec=2, tm_wday=5, tm_yday=171, tm_isdst=-1)

那么为什么第四次调用会让我返回到第 36 分钟和第 2 秒在那之前打过电话?为什么前两个调用给出的时间完全相同,即使我在它们之间留出了足够的时间?

最佳答案

正如flask所提到的,默认值是在函数解析时计算的,因此它将被设置为一次。

对此的典型解决方案是不使用默认的可变值。您可以执行以下操作:

def f(t=None):
if not t:
t = datetime.datetime.now()
return t.timetuple()

顺便说一句,为了读者的利益,您应该尝试使用有意义的方法和变量名称。

关于将函数作为可选参数的 Python 函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com