Python 如何将参数作为默认值传递?
我想使用参数的默认值,但在调用中包括其名称。我认为将参数设置为“无”可以做到这一点,但事实并非如此 例如:Python 如何将参数作为默认值传递?,python,function,named-parameters,Python,Function,Named Parameters,我想使用参数的默认值,但在调用中包括其名称。我认为将参数设置为“无”可以做到这一点,但事实并非如此 例如: def a(num=3): print(num) a(num=None) #returns "None", not "3" like I want it to. 在调用中包含命名参数时,如何使用该参数的默认值?(这可能吗?) 为了解释为什么我想做这样的事情(因为这可能是我总体编码风格中的一个问题): 我经常有这样的代码 def add(num, numToAdd=1):
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
我想让addtweep
的numToAdd
始终使用默认的add
的numToAdd
,无论它是什么
原因:也许在代码的后面,我意识到在执行add
时,添加2作为默认值比添加1更好
所以我把它改成
def add(num, numToAdd=2):
return num+numToAdd
但是,这不会有任何帮助,除非我总是可以在addtweeps
中指定在收到默认值时使用默认值
这就是基本原理
换句话说:我让一个函数(第一个函数)调用另一个函数(第二个函数),如果第一个函数必须使用默认值,我希望它默认为第二个函数的默认值。这样,我只需更改第二个函数(不是每个调用它的函数)的默认值就可以更改默认功能。不,你不能:这在术语上是矛盾的。当且仅当未在参数列表中提供值时,才会使用默认值。如果您提供一个值,那么默认值不能在例程中使用
def a(num=None):
if num is None:
num = 3
print(num)
a(num=None) # prints 3
a() # prints 3
。。。我想。。。也许吧
或者解释默认参数
def a(num=3):
print(num)
a(num=None) # prints None
a() # prints 3
没有内置支持显式使用参数的默认值。如果不想将参数保留在调用站点,则必须非常手动地检索默认值:
import inspect
a(num=inspect.signature(a).parameters['num'].default)
在大多数情况下,这是不值得的。关于如何做到这一点有一个详细的说明(如果您确定我要求的默认获取功能确实是您想要的)。但是,我只是想指出,在实践中,我相信我试图实现的目标通常是通过全局变量来实现的
也就是说,我想做的事情通常是:
DEFAULT_NUM_TO_ADD = 1
def add(num, numToAdd=DEFAULT_NUM_TO_ADD):
return num+numToAdd
def addTwice(num, numToAdd=DEFAULT_NUM_TO_ADD):
for i in range(2):
num=add(num, numToAdd=numToAdd)
return num
addTwice(3) # returns 5
这允许我快速更改默认值,两个函数使用相同的默认值。这是明确和非常清楚的;它是pythonic。如果包含默认参数,则无需在函数调用中提及它。只需执行
a()
。它不打印任何内容,因为您显式传递的参数覆盖了默认值。为什么要传递值而不使用它?我不明白为什么这会被严重否决。这是一个合理的、写得很好的问题。@michaelpri请看我对为什么要这样做的解释。。。你是对的,但我不想为默认参数的不同组合编写每个显式案例。是的,这就是我定义大多数函数的方式。。。这只是一个麻烦,尤其是有很多参数。