Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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,我希望有一个函数,允许您设置一个默认的返回值,而不是一个错误,如果结果没有。这为我提供了如下函数: def get_name(default=None): result = get_setting('name') if result: return result elif default: return default else: raise NoNameError 但是,当默认值为None时,这会导致错误。我该如

我希望有一个函数,允许您设置一个默认的返回值,而不是一个错误,如果结果没有。这为我提供了如下函数:

def get_name(default=None):
    result = get_setting('name')
    if result:
        return result
    elif default:
        return default
    else:
        raise NoNameError
但是,当默认值为
None
时,这会导致错误。我该如何编写此代码,以便有人可以调用
get\u name(默认值=None)
,而不是返回错误

我知道我可以做一个黑客,比如:

def get_name(default=SomeSingletonObject):
    result = get_setting('name')
    if result:
        return result
    elif default is not SomeSingletonObject:
        return default
    else:
        raise NoNameError

但这完全是一种糟糕的形式

这是一种常见的模式,其中
是完全可以接受的输入:

_marker = object()

def foo(val1=_marker):
    if val1 is _marker:
        do_some_stuff()
以下是该库中一个更有用的示例:


这是一种常见的模式,其中
None
是完全可接受的输入:

_marker = object()

def foo(val1=_marker):
    if val1 is _marker:
        do_some_stuff()
以下是该库中一个更有用的示例:


这是一种常见的模式,其中
None
是完全可接受的输入:

_marker = object()

def foo(val1=_marker):
    if val1 is _marker:
        do_some_stuff()
以下是该库中一个更有用的示例:


这是一种常见的模式,其中
None
是完全可接受的输入:

_marker = object()

def foo(val1=_marker):
    if val1 is _marker:
        do_some_stuff()
以下是该库中一个更有用的示例:


可能重复为什么一开始就抛出错误?我想说像
def get_name(default=type)
(或者用户不太可能通过的任何内容)这样的东西对于您的目的来说已经足够实用了。所以您基本上是说任何默认值都是可以接受的,对吗?在这种情况下,else分支永远不应该执行,那么为什么不能将else分支设为默认值并删除NoNameError条件?@MxyL用例是没有名称意味着对象尚未设置,这将引发错误。然而,一个更为罕见的用法只是想知道它是否存在,因此它不需要错误。可能重复您为什么首先抛出错误?我会说类似于
def get_name(default=type)
(或者用户不太可能通过的任何内容)对于你的目的来说已经足够实用了。所以你基本上是说任何默认值都是可以接受的,对吗?在这种情况下,else分支永远不应该执行,那么为什么不能将else分支设为默认值并删除NoNameError条件?@MxyL用例是没有名称意味着对象尚未设置,这将引发错误。然而,一个更为罕见的用法只是想知道它是否存在,因此它不需要错误。可能重复您为什么首先抛出错误?我会说类似于
def get_name(default=type)
(或者用户不太可能通过的任何内容)对于你的目的来说已经足够实用了。所以你基本上是说任何默认值都是可以接受的,对吗?在这种情况下,else分支永远不应该执行,那么为什么不能将else分支设为默认值并删除NoNameError条件?@MxyL用例是没有名称意味着对象尚未设置,这将引发错误。然而,一个更为罕见的用法只是想知道它是否存在,因此它不需要错误。可能重复您为什么首先抛出错误?我会说类似于
def get_name(default=type)
(或者用户不太可能通过的任何内容)对于你的目的来说已经足够实用了。所以你基本上是说任何默认值都是可以接受的,对吗?在这种情况下,else分支永远不应该执行,那么为什么不能将else分支设为默认值并删除NoNameError条件?@MxyL用例是没有名称意味着对象尚未设置,这将引发错误。然而,更为罕见的用法只是想知道它是否存在,所以不需要错误。