有没有办法让函数的第一个参数可选?
myFunction <- function(a = NULL, b, c) {
if(!is.null(a)) {
d <- a + c
} else {
d <- b +c
}
return(d)
}
myFunction(1, 2) # Fails, because c is missing
在某种程度上,这很明显,因为未命名的参数按照给定的顺序进行匹配。
但另一方面, R 也可以尝试查看给定的参数数量,并推断它必须是缺少的可选参数。
我的例子是在 R 中,但据我所知,在 Python 中也是如此。
答案 0 :(得分:2)
在python
中,您可以使用星号*
在第一个位置设置默认参数。 但这只是星号的副作用。事实上,星号会使星号之后的所有参数都被命名为参数。因此,您必须将它们作为命名参数传递给函数,例如使用b=1, c=2
。试试吧:
def myFunction(*, a=None, b, c):
if a is not None:
d = a + c
else:
d = b +c
return d
myFunction(b=1, c=2)
不幸的是我只能说python。但据我所知,使用命名参数也适用于R
。
答案 1 :(得分:0)
在R中,命名参数可行。
在python中,为了避免这种歧义,声明这样的函数会给出一个非常可自我解释的语法错误。
SyntaxError: non-default argument follows default argument
绕过这种方法的方法是在默认参数之后添加一个星号,以建议所有下一个参数都将按名称给出。
e.g。
def myFunction(a=None, *, b, c):
pass
但是你只能用0到1个位置参数和2个命名参数
来调用函数