2017-06-06 152 views
-3

我想使用参数的默认值,但在调用中包含其名称。我认为将参数设置为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 

我想要的是addTwicenumToAdd始终使用默认值addnumToAdd,无论它是什么。

原因:也许在后面的代码,我意识到这是更好地执行add时相比,它是添加1

添加2作为默认所以我将其更改为

def add(num, numToAdd=2): 
     return num+numToAdd 

但,除非我总能在addTwice中指定使用缺省值(如果它接收到默认值),否则这将无济于事。

所以,这是理由。换句话说:我有一个函数(第一个函数)调用另一个函数(第二个函数),并且如果第一个函数必须使用默认值,我希望它默认为默认值在第二个功能上。这样,我只需要更改第二个函数的默认值(不是每个函数都调用它)以更改默认功能。

+2

如果包含默认参数,则不必在函数调用中提及它。只要做'a()'。 – michaelpri

+1

它打印无,因为您显式传递覆盖默认值的参数 – Li357

+0

为什么要传递值而不使用它? – cmd

回答

4

有没有内置的支持,以明确使用某个参数的默认值。如果你不想离开这个参数了在调用点,你必须非常手动检索默认值:

import inspect 

a(num=inspect.signature(a).parameters['num'].default) 

这不会是值得的,在大多数情况下。

0

不,你不能:这是一个矛盾的条款。使用默认值当且仅当您做而不是在参数列表中提供一个值。如果您提供了一个值,那么在例程中使用默认的不能使用

2
def a(num=None): 
    if num is None: 
     num = 3 
    print(num) 

a(num=None) # prints 3 
a() # prints 3 

...我想...也许

或者解释默认PARAMS

def a(num=3): 
    print(num) 

a(num=None) # prints None 
a() # prints 3 
+0

是的,这就是我一直在定义我的大部分功能......虽然这只是一个麻烦,特别是有很多参数。 –