三元运算符的可选参数
optional argument with ternary operator
我有一个函数 f
可以接受可变数量的参数,如下所示:
f = f_5_args if five else f_4_args
要致电 f
,我目前正在这样做:
if five:
result = f(x1, x2, x3, x4, x5)
else:
result = f(x1, x2, x3, x4)
有没有更好的调用 f
的方法,它也可以使用三元运算符或类似的东西?在 Lua 等其他语言中,我可以这样做:
result = f(x1, x2, x3, x4, x5 if five else None)
但我在 python 中找不到等效的东西。
编辑:我当然可以:
result = f(x1, x2, x3, x4, x5) if five else f(x1, x2, x3, x4)
但在我的情况下 x_i 是一些相对较长的表达式,所以我不想写两次。我可以将它们存储在一些变量中并执行此操作,但我想知道是否有更好的方法。
您可以执行以下操作:
result = f(*(filter(None, (x1, x2, x3, x4, x5 if five else None))))
请注意,此解决方案消除了所有 False 和零值以及 None
s,因此如果它适合您的用例,请使用它。
你可以这样做:
fargs = [x1, x2, x3, x4]
if five:
fargs.append(x5)
result = f_5_args(*fargs)
else:
result = f_4_args(*fargs)
这避免了必须将所有函数参数写出两次。
如果您有参数列表,可以使用切片使其更简洁:
args = [x1, x2, x3, x4, x5]
result = f(*args) if five else f(*args[:4])
但是使用接受任意数量的位置参数的函数可能会更容易:
def f45(*args):
if len(args) == 5:
# do something
elif len(args) == 4:
# do something else
我有一个函数 f
可以接受可变数量的参数,如下所示:
f = f_5_args if five else f_4_args
要致电 f
,我目前正在这样做:
if five:
result = f(x1, x2, x3, x4, x5)
else:
result = f(x1, x2, x3, x4)
有没有更好的调用 f
的方法,它也可以使用三元运算符或类似的东西?在 Lua 等其他语言中,我可以这样做:
result = f(x1, x2, x3, x4, x5 if five else None)
但我在 python 中找不到等效的东西。
编辑:我当然可以:
result = f(x1, x2, x3, x4, x5) if five else f(x1, x2, x3, x4)
但在我的情况下 x_i 是一些相对较长的表达式,所以我不想写两次。我可以将它们存储在一些变量中并执行此操作,但我想知道是否有更好的方法。
您可以执行以下操作:
result = f(*(filter(None, (x1, x2, x3, x4, x5 if five else None))))
请注意,此解决方案消除了所有 False 和零值以及 None
s,因此如果它适合您的用例,请使用它。
你可以这样做:
fargs = [x1, x2, x3, x4]
if five:
fargs.append(x5)
result = f_5_args(*fargs)
else:
result = f_4_args(*fargs)
这避免了必须将所有函数参数写出两次。
如果您有参数列表,可以使用切片使其更简洁:
args = [x1, x2, x3, x4, x5]
result = f(*args) if five else f(*args[:4])
但是使用接受任意数量的位置参数的函数可能会更容易:
def f45(*args):
if len(args) == 5:
# do something
elif len(args) == 4:
# do something else