You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python默认参数仅在定义时求值的问题?

Python 默认参数调用时求值的实现方案

Python存在一个特殊特性:默认参数仅会在函数或方法定义时求值一次。以下示例代码可展示该特性:

from datetime import datetime
import time
def some_func(ts: datetime = datetime.now()):
    print("What time is it 'now'?",ts)

some_func()
time.sleep(5)   # 休眠5秒
some_func()

运行后输出如下:

What time is it 'now'? 2023-08-08 18:43:43.697853
What time is it 'now'? 2023-08-08 18:43:43.697853

这个行为虽有官方文档记录,但和Scala、Java等数十种语言的逻辑不同。要实现默认参数在函数调用时求值,最常用且简单的方案是用None作为默认占位符,在函数内部动态生成实际默认值:

from datetime import datetime
import time

def some_func(ts: datetime | None = None):
    # 当未传入参数时,在调用时生成默认值
    if ts is None:
        ts = datetime.now()
    print("What time is it 'now'?", ts)

some_func()
time.sleep(5)
some_func()

这段代码运行后,两次调用会输出不同的时间戳——因为每次调用时都会执行datetime.now()获取当前时间。

原理很直接:None是Python的不可变单例对象,定义函数时求值不会产生副作用;而函数每次被调用时,都会执行内部的判断逻辑,动态生成需要的默认值,完美解决默认参数提前求值的问题。

内容的提问来源于stack exchange,提问作者WestCoastProjects

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:05:07