我正在寻找一种将参数的默认值传递给调用函数的好方法。让我举例说明一下:
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 会为您完成一些工作。
