Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何指示函数应该使用可选参数的默认值而不忽略它?_Python_Optional Arguments - Fatal编程技术网

Python 如何指示函数应该使用可选参数的默认值而不忽略它?

Python 如何指示函数应该使用可选参数的默认值而不忽略它?,python,optional-arguments,Python,Optional Arguments,我试图按照这个原则编写不重复的代码 考虑一个包含许多参数的函数调用,包括强制参数和可选参数。在某些情况下,我希望为可选参数指定一个值,而在其他情况下,我希望将该值保留为其默认值。为了简化我的问题: def func(a, b=2): print("b = {}".format(b)) avalue = 1 condition = 2 arg = None # <-- Means: "use default" if condition == 1: arg = 3 fu

我试图按照这个原则编写不重复的代码

考虑一个包含许多参数的函数调用,包括强制参数和可选参数。在某些情况下,我希望为可选参数指定一个值,而在其他情况下,我希望将该值保留为其默认值。为了简化我的问题:

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中可以吗?

使用字典,如果要指定可选参数,请仅将其设置为其中的键值对。然后使用调用语法应用字典:

avalue = 1
condition = 2

kwargs = {}
if condition == 1:
    kwargs['b'] = 3

func(avalue, **kwargs)
空字典(条件!=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
以上假设您可以修改函数定义。如果情况并非如此,您必须使用
**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)

解决方案之一可以是:

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)

很好的建议,但是我不能修改
func
,因为它是一个库函数。在大多数情况下,我更喜欢它而不是
**kwargs
技巧。stdlib中的东西就是这样做的。如果b为无,则使用
:b=2
def func(a, b=2, **kwargs):
    print("b = {}".format(b))

avalue = 1
condition = 2

func(avalue, **{} if condition != 1 else {'b':3})
def func(a, b=2):
    print("b = {}".format(b))

avalue = 1
condition = 2
if condition == 1:
    func(avalue, b=3)
else:
    func(avalue)