Skip to main content
 首页 » 编程设计

python之如何将参数的默认值从一个函数定义传递到更高的函数定义

2025年05月04日14haluo1

我正在寻找一种将参数的默认值传递给调用函数的好方法。让我举例说明一下:

def greet(name, greeting='Hello', punctuation='!'): 
    return greeting+' '+name+punctuation 
 
def greet_with_hi(name, punctuation='!'): 
   return greet(name, 'Hi', punctuation) 

这是一个没有使用的示例,但这是我的问题:如何省略 greet_with_hi 的 puncuation 参数的默认值?此参数的默认值已在 greet 中定义。

我能想到的解决方案:

  • 就这样吧,缺点:必须在每个函数定义上更改默认值,而不是只在一个地方更改它
  • 使用 None 作为默认参数的值,并在 greet 中处理 None,缺点:特殊处理
  • 使用全局“常量”,如 DEFAULT_PUNCTUATION='!' 并将其用作默认参数的值,缺点:似乎不是很 pythonic

我还没有看到 API 和其他代码中的通用模式。您将如何处理这种模式?

请您参考如下方法:

为什么不使用None?

def greet(name, greeting='Hello', punctuation='!'): 
    return greeting+' '+name+punctuation 
 
def greet_with_hi(name, punctuation=None): 
    if punctuation: 
        return greet(name, 'Hi', punctuation) 
    else: 
        return greet(name, 'Hi') 

实际上任何特殊值都可以,但 None if/else 更好。

如果您希望 "" 空字符串是有效的标点符号,您必须指定: 如果标点不是无:

通常,模式是包装器为包装函数中的强制参数设置默认值:

def greet(name, greeting, punctuation): 
    return greeting+' '+name+punctuation 
 
def greet_with_hi(name, punctuation='!'): 
   return greet(name, 'Hi', punctuation) 

greet() 是一般情况,greet_with_hi 会为您完成一些工作。