【发布时间】:2017-11-08 02:02:20
【问题描述】:
我想使用参数的默认值,但在调用中包含它的名称。我认为将参数设置为 None 可以做到这一点,但事实并非如此。
例如:
def a(num=3):
print(num)
a(num=None) #returns "None", not "3" like I want it to.
如何在调用中使用命名参数的默认值? (有可能吗?)
只是为了解释为什么我想做这样的事情(因为这可能是我整体编码风格的问题):
我经常有这样的代码
def add(num, numToAdd=1):
return num+numToAdd
def addTwice(num, numToAdd=None):
for i in range(2):
num=add(num, numToAdd=numToAdd)
return num
addTwice(3) #throws an error instead of returning 5
我想要的是addTwice 的numToAdd 始终使用add 的numToAdd 的默认值,无论它是什么。
原因:可能在后面的代码中我意识到执行add时默认添加2比添加1更好。
所以我改成
def add(num, numToAdd=2):
return num+numToAdd
但是,除非我总是可以在 addTwice 中指定在收到默认值时使用默认值,否则这将无济于事。
所以,这就是理由。
换句话说:我有一个函数(第一个函数)调用另一个函数(第二个函数),如果第一个函数必须使用默认值,我希望它默认为默认值第二个功能。这样,我只需更改第二个函数的默认值(不是每个调用它的函数)即可更改默认功能。
【问题讨论】:
-
如果包含默认参数,则不需要在函数调用中提及。只需
a()。 -
它打印 None 因为您明确传递了覆盖默认值的参数
-
为什么要传递一个值而不使用它?
-
我不明白为什么这会受到如此严重的反对。这是一个合理的、写得很好的问题。
-
@michaelpri 请参阅我对我为什么要这样做的解释......你是对的,但我不想为每个显式案例编写默认参数的不同组合。
标签: python function named-parameters