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

Python中如何避免调用其他函数时重复使用默认参数值?

复用Python函数默认参数的解决方案

先看场景:
有个带默认参数的函数:

def print_number(number=42):
    print(number)

现在要写另一个函数print_number_twice,调用它两次,同时允许用户传入参数。一开始可能会这么写:

def print_number_twice(number=42):
    print_number(number)
    print_number(number)

但这里硬写了默认值42,后续如果修改print_number的默认值(比如改成100),很容易漏改print_number_twice的默认值,导致两个函数的默认行为不一致,维护起来麻烦。

有人试过用None当默认值:

def print_number_twice(number=None):
    print_number(number)
    print_number(number)

但Python里None是合法参数,调用时会直接打印"None",达不到复用原函数默认值的效果。

下面给两种实用的解决办法:

方法1:主动获取原函数的默认参数

可以通过Python的inspect模块或者函数自带的__defaults__属性,拿到print_number的默认参数值,避免硬写:

用inspect模块(可读性更好)

import inspect

def print_number(number=42):
    print(number)

def print_number_twice(number=None):
    if number is None:
        # 获取print_number函数的参数签名
        sig = inspect.signature(print_number)
        # 取出number参数的默认值
        number = sig.parameters['number'].default
    print_number(number)
    print_number(number)

用__defaults__属性(更简洁)

每个函数的__defaults__属性会返回一个元组,里面是位置参数的默认值,按顺序排列:

def print_number(number=42):
    print(number)

def print_number_twice(number=None):
    if number is None:
        # 第一个位置参数的默认值就是元组的第一个元素
        number = print_number.__defaults__[0]
    print_number(number)
    print_number(number)

方法2:参数透传(最灵活)

如果不需要在print_number_twice里处理参数,直接用*args和**kwargs把参数原封不动传给print_number就行,不管原函数默认值怎么变,都能自动复用:

def print_number(number=42):
    print(number)

def print_number_twice(*args, **kwargs):
    print_number(*args, **kwargs)
    print_number(*args, **kwargs)

这种方式还能兼容原函数后续的参数变更,比如以后给print_number加个新的默认参数prefix="Number: ",print_number_twice不用改一行代码就能支持传入这个参数,扩展性拉满。


内容的提问来源于stack exchange,提问作者Tomáš Zato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:05:43