有什么方法可以将if语句放入函数调用参数中?

时间:2019-05-31 11:06:01

标签: python

我发现我们可以在函数调用参数内使用三元运算符:

def foo(n):
    print(n)
a, b = 1, 2
foo(a if a>b else b)
# prints 2

我想知道是否有一种方法可以在函数调用参数中没有else的情况下使用?因此,如果它是真的,则将a传递给它,否则,不要传递任何东西。

我尝试过

foo(a if a>b else pass)
foo(a if a>b)
foo(if a>b: a)
foo(a>b and a)

以上都不起作用。

感谢您的帮助。

编辑-----

抱歉,让我改一下我的问题。

我要的是一种根据条件确定是否应该传递参数的方法。

所以基本上我必须调用一个需要很多kwarg的大函数,例如:

# function call
thefunc(
    a=1,
    b=2,
    c=3,
    d=4,
    e=5
    #...
)

所有args都是我自己决定的选项,或者在某些情况下取决于条件。

由于参数列表太大,因此不希望在if语句中编写函数调用,所以我需要知道有一种方法可以说:

thefunc(
    a=1,
    #if condition: b=2,
    c=3,
    ....
)

因此,确定是否要使用kwarg。没关系,只需要知道,谢谢。

2 个答案:

答案 0 :(得分:1)

三元运算符需要if-和else-子语句。可以尝试使用默认函数参数来代替仅使用-if:

def foo(n=None):

根据需要将None传递给函数:

foo(a if a > b else None)

然后在内部检查None-非None参数:

def foo(n=None):
    if n:
        print(n)

答案 1 :(得分:1)

You can if you don't mind some ugliness... The * syntax turns a list of values into parameters, so you could use:

foo(*[a] if a > b else [])

Whether you should is something else :-)