Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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_Function_Arguments_Parameter Passing - Fatal编程技术网

python:可选参数

python:可选参数,python,function,arguments,parameter-passing,Python,Function,Arguments,Parameter Passing,我想获得一个如下工作的函数: operations(a, b) = a + b operations(a, b, operation = 'subtraction') = a - b operations(a, b, operation = 'multiplication') = a * b operations(a, b, operation = 'division') = a / b 操作应该是一个可选参数,指定要执行的操作。默认情况下,应该考虑加法运算。 我无法使用*args和**kwa

我想获得一个如下工作的函数:

operations(a, b) = a + b
operations(a, b, operation = 'subtraction') = a - b
operations(a, b, operation = 'multiplication') = a * b
operations(a, b, operation = 'division') = a / b
操作应该是一个可选参数,指定要执行的操作。默认情况下,应该考虑加法运算。

我无法使用*args和**kwargs实现这一点,可能是因为我没有真正了解它们的工作原理

多谢各位


编辑:对不起,我犯了一个愚蠢的错误。无论如何,谢谢。

您只需要为参数提供一个默认值

def operations(a, b, operation='addition'):
    ...
*args允许您在一个名为args的元组中收集任意位置参数

**kwargs的工作原理相同,但对于关键字参数,将它们收集到dict中:

**kwargs通常在您只需要将一组未知参数传递给另一个函数调用时使用。在这里的例子中,您知道要使用名为operation的参数,因此可以在参数列表中按名称指定它

您还可以要求将其作为关键字参数传递,如下所示:

def operations(a, b, *, operation='addition'):
    ...

现在运算a,b,“减法”是非法的;它必须像操作A、b或操作A、b、操作='减法'一样调用。

您可以使用可选参数:

def operation(a, b, tp = "addition"):
    if tp == "subtraction":
        return a - b
    if tp == "division":
        return a / b
    if tp == "multiplication":
        return a * b
    return a + b

print(operation(10, 20) == 30)
print(operation(10, 20, "subtraction") == -10)

与我的答案相比,您没有使用==而是=witch在if语句中创建sinax错误。我后来注意到了这一点。谢谢
def operations(a, b, *, operation='addition'):
    ...
def operation(a, b, tp = "addition"):
    if tp == "subtraction":
        return a - b
    if tp == "division":
        return a / b
    if tp == "multiplication":
        return a * b
    return a + b

print(operation(10, 20) == 30)
print(operation(10, 20, "subtraction") == -10)