Python中是否存在"缺失"功能?

Fra*_* M. 3 python parameters

在R中,有一个missing()测试函数,引用:"是否将值指定为函数的参数":

my_function <- function(argn1){
  if(missing(argn1)){
    print("argn1 has not been supplied")
  } else {
    print("argn1 has been supplied")  
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在打电话时:

my_function("hello")
Run Code Online (Sandbox Code Playgroud)

[1]"argn1已被提供"

my_function()
Run Code Online (Sandbox Code Playgroud)

[1]"argn1尚未提供"

Python中有这样的东西吗?

Wil*_*sem 8

通常没有默认值的参数是强制性的.因此,您可以提供一个默认对象 missing,以检查该属性是否已显式指定.喜欢:

missing = object()

def foo(arg1 = missing):
    if arg1 is missing:
        print('Arg1 is missing')
    else:
        print('Arg1 is not missing')
Run Code Online (Sandbox Code Playgroud)

使用isover ==可能至关重要,因为is检查引用相等.

有时使用None,如:

def foo(arg1 = None):
    if arg1 is None:
        # ...
Run Code Online (Sandbox Code Playgroud)

但需要注意的是,这里的Python不能让一个隐含参数,像之间的差异foo()或显式调用None,喜欢foo(None).

此外,还可以选择使用*args:

def foo(*args):
    # ...
Run Code Online (Sandbox Code Playgroud)

如果你调用foo(None,1)那么所有的参数将被放入一个元组中,一个元组被命名args(这里args将是args = (None,1)).那么我们可以检查元组是否包含至少一个元素:

def foo(*args):
    if args:
        print('At least one element provided')
    else:
        print('No element provided')
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 5

不,因为Python不支持使用错误数量的参数调用函数.如果定义一个函数来获取一个参数(没有默认值):

def my_func(arg1):
    pass
Run Code Online (Sandbox Code Playgroud)

然后通过它调用它my_func(),Python会引发一个TypeError.


Rem*_*ber 5

不,没有missing功能。

但是,您可以通过使用带有默认值的函数参数来做同样的事情:

def foo(arg=None):
    if arg is None:
        print('arg is missing.')
    else:
        print('arg is present.')
Run Code Online (Sandbox Code Playgroud)