首先使用未命名的参数可选

时间:2018-05-28 11:12:30

标签: python r function parameters arguments

有没有办法让函数的第一个参数可选?

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 中也是如此。

2 个答案:

答案 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个命名参数

来调用函数