Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检测是否提供了可选参数(可能不包含任何参数)_Python - Fatal编程技术网

Python 检测是否提供了可选参数(可能不包含任何参数)

Python 检测是否提供了可选参数(可能不包含任何参数),python,Python,是否有比下面的示例更好的方法来检测是否提供了可选参数?即使没有提供,我们也希望返回它,而不是引发异常 预期成果: >>> get_value('key-exists-not') # default not provided KeyError >>> get_value('key-exists-not', None) # should support arg None >>> get_value('key-exists-not', defa

是否有比下面的示例更好的方法来检测是否提供了可选参数?即使没有提供,我们也希望返回它,而不是引发异常

预期成果:

>>> get_value('key-exists-not')  # default not provided
KeyError
>>> get_value('key-exists-not', None)  # should support arg
None
>>> get_value('key-exists-not', default=None)  # as well as kwarg
None
>>> get_value('key-exists-not', default='')
''
这是最好的/推荐的方法吗

def get_value(key, default='somerubbishthatwillneverbeused'):
    try:
        return _data[key]
    except KeyError:
        if default != 'somerubbishthatwillneverbeused':
            return default
        raise

使用哨兵值;这是一个单独的个体,你可以用它来测试:


使用哨兵值;这是一个单独的个体,你可以用它来测试:

两种选择

def foobar (**kwargs):
    if 'some_key' in kwargs:
        # it was provided
另一个呢

default = object()
def foobar (some_key=default):
    if some_key is default:
        # some_key not specified
两种选择

def foobar (**kwargs):
    if 'some_key' in kwargs:
        # it was provided
另一个呢

default = object()
def foobar (some_key=default):
    if some_key is default:
        # some_key not specified

我更喜欢第二个选项,因为它不会破坏函数签名。同意。我在查看cherrypy的源代码时看到了这个选项,这是一个很好的解决方案。我更喜欢第二个选项,因为它不会破坏函数签名。同意。当我查看cherrypy的源代码时,看到了这个,这是一个很好的解决方案。没错,这是一个很难搜索的问题,因为它与标准默认值有点不同。没错,这是一个很难搜索的问题,因为它与标准默认值有点不同。