如何指示函数应使用其可选参数的默认值而不省略它?
How to indicate that a function should use its default value of an optional argument without omitting it?
我正在尝试编写不会自我重复的代码,遵循 DRY 原则。
考虑一个带有许多参数的函数调用,包括必需参数和可选参数。在某些情况下,我想为可选参数指定一个值,而在其他情况下,我想将该值保留为其默认值。为了简化我的问题:
def func(a, b=2):
print("b = {}".format(b))
avalue = 1
condition = 2
arg = None # <-- Means: "use default"
if condition == 1:
arg = 3
func(avalue, b=arg)
输出:
b = None
预期输出:
b = 2
因此,我试图避免像这样对函数调用进行两次编码:
if arg:
func(avalue, b=arg)
else:
func(avalue)
Python可以吗?
使用字典,如果你想指定它,只将可选参数设置为键值对。然后使用 **kwargs
调用语法应用字典:
avalue = 1
condition = 2
kwargs = {}
if condition == 1:
kwargs['b'] = 3
func(avalue, **kwargs)
空字典(condition != 1
情况)将 b
设置为默认值。
这个怎么样:
def func(a, b=None):
b = 2 if not b else b
print("b = {}".format(b))
avalue = 1
condition = 2
arg = None # <-- Means: "use default"
if condition == 1:
arg = 3
func(avalue, arg) # b = 2
如果condition = 1
:
func(avalue, arg) # b = 3
以上假定您可以修改函数定义。如果不是这种情况,则必须使用 **kwargs
.
怎么样:
def func(a, b=None):
if not b:
b = 2
print("b = {}".format(b))
avalue = 1
condition = 2
arg = None # <-- Means: "use default"
if condition == 1:
arg = 3
func(avalue, b=arg)
然而,此时默认值并未真正按照应有的方式使用,
当您有两种不同的方法时,通常会保留默认值,一种以另一种不应该的方式工作,例如 addition/subtraction 带有开关:
def maths(a,b,sub=false):
result = a + b
if sub:
result = a - b
return result
其中一个解决方案可以是:
def func(a, b=2, **kwargs):
print("b = {}".format(b))
avalue = 1
condition = 2
func(avalue, **{} if condition != 1 else {'b':3})
Op 提到函数 func 不能被修改,所以我的建议是:
def func(a, b=2):
print("b = {}".format(b))
avalue = 1
condition = 2
if condition == 1:
func(avalue, b=3)
else:
func(avalue)
我正在尝试编写不会自我重复的代码,遵循 DRY 原则。
考虑一个带有许多参数的函数调用,包括必需参数和可选参数。在某些情况下,我想为可选参数指定一个值,而在其他情况下,我想将该值保留为其默认值。为了简化我的问题:
def func(a, b=2):
print("b = {}".format(b))
avalue = 1
condition = 2
arg = None # <-- Means: "use default"
if condition == 1:
arg = 3
func(avalue, b=arg)
输出:
b = None
预期输出:
b = 2
因此,我试图避免像这样对函数调用进行两次编码:
if arg:
func(avalue, b=arg)
else:
func(avalue)
Python可以吗?
使用字典,如果你想指定它,只将可选参数设置为键值对。然后使用 **kwargs
调用语法应用字典:
avalue = 1
condition = 2
kwargs = {}
if condition == 1:
kwargs['b'] = 3
func(avalue, **kwargs)
空字典(condition != 1
情况)将 b
设置为默认值。
这个怎么样:
def func(a, b=None):
b = 2 if not b else b
print("b = {}".format(b))
avalue = 1
condition = 2
arg = None # <-- Means: "use default"
if condition == 1:
arg = 3
func(avalue, arg) # b = 2
如果condition = 1
:
func(avalue, arg) # b = 3
以上假定您可以修改函数定义。如果不是这种情况,则必须使用 **kwargs
.
怎么样:
def func(a, b=None):
if not b:
b = 2
print("b = {}".format(b))
avalue = 1
condition = 2
arg = None # <-- Means: "use default"
if condition == 1:
arg = 3
func(avalue, b=arg)
然而,此时默认值并未真正按照应有的方式使用, 当您有两种不同的方法时,通常会保留默认值,一种以另一种不应该的方式工作,例如 addition/subtraction 带有开关:
def maths(a,b,sub=false):
result = a + b
if sub:
result = a - b
return result
其中一个解决方案可以是:
def func(a, b=2, **kwargs):
print("b = {}".format(b))
avalue = 1
condition = 2
func(avalue, **{} if condition != 1 else {'b':3})
Op 提到函数 func 不能被修改,所以我的建议是:
def func(a, b=2):
print("b = {}".format(b))
avalue = 1
condition = 2
if condition == 1:
func(avalue, b=3)
else:
func(avalue)