有没有"缺少" Python中的函数?

时间:2017-06-22 13:19:30

标签: python parameters

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

my_function <- function(argn1){
  if(missing(argn1)){
    print("argn1 has not been supplied")
  } else {
    print("argn1 has been supplied")  
  }
}

然后致电:

my_function("hello")
  

[1]&#34;已经提供了argn1&#34;

my_function()
  

[1]&#34; argn1尚未提供&#34;

Python中有这样的东西吗?

5 个答案:

答案 0 :(得分:8)

通常没有默认值的参数强制。因此,您可以提供默认对象 missing,以检查属性是否已明确指定。像:

missing = object()

def foo(arg1 = missing):
    if arg1 is missing:
        print('Arg1 is missing')
    else:
        print('Arg1 is not missing')

使用is超过==可能至关重要重要性,因为is会检查引用相等性。

有时会使用None,例如:

def foo(arg1 = None):
    if arg1 is None:
        # ...

但请注意,Python在隐式参数(如foo())或显式调用None(如foo(None))之间无法区分。

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

def foo(*args):
    # ...

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

def foo(*args):
    if args:
        print('At least one element provided')
    else:
        print('No element provided')

答案 1 :(得分:5)

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

def my_func(arg1):
    pass

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

答案 2 :(得分:4)

不,没有missing功能。

但是,您可以通过使用具有默认值的函数参数来执行相同的操作:

def foo(arg=None):
    if arg is None:
        print('arg is missing.')
    else:
        print('arg is present.')

答案 3 :(得分:2)

在python中,你经常会发现这种函数声明:

def my_function(arg1=None):
    if arg1:
        # Do something

    else:
        # Do something else

实现您的目标

答案 4 :(得分:2)

没有明显的等价物。但您可以使用默认参数

def my_function(str=None):
    if str is None:
        print("argn1 has not been supplied")
    else:
        print("argn1 has been supplied")