我想使用参数的默认值,但在调用中包含其名称。我认为将参数设置为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
的{{1}}总是使用默认的numToAdd
add
,无论它是什么。
原因:可能在代码后面我意识到在执行numToAdd
时添加2作为默认值比添加1更好。
所以我把它改成
add
但是,除非我总是在def add(num, numToAdd=2):
return num+numToAdd
中指定使用默认值(如果它收到默认值),否则这将无济于事。
所以,这就是基本原理。
换句话说:我有一个函数(第一个函数)调用另一个函数(第二个函数),如果第一个函数必须使用默认值,我希望它默认为默认值第二个功能。这样,我只需更改第二个函数的默认值(不是每个调用它的函数),以便更改默认功能。
答案 0 :(得分:4)
没有明确使用参数默认值的内置支持。如果您不想在呼叫网站上保留参数,则必须非常手动检索默认值:
import inspect
a(num=inspect.signature(a).parameters['num'].default)
在大多数情况下都不值得。
答案 1 :(得分:2)
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
答案 2 :(得分:0)
不,你不能说:这是一个矛盾。当且仅当 在参数列表中提供值时,才使用默认值。如果提供值,则默认不能在例程中使用。
答案 3 :(得分:0)
如何进行此操作有great answer(如果您确定我所要求的默认获取功能确实是您想要的)。但是,我只是想指出,实际上,我相信我试图实现的目标通常是使用全局变量完成的。
也就是说,通常要做的事情是:
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。