python - 如何区分默认参数和提供默认值的参数?

标签 python default-arguments

假设我有函数f,如下所示:

def f(c=None):
    return 42 if c is None else c

那么我无法从此函数中获取 None 。现在您可能会想“好吧,只需检查另一个值,例如 2128.213 或其他值”,但是我无法从函数中获取该特定值,可以吗?

这就是为什么我想在可能的情况下区分 f()f(None) 以便我可以拥有

f() -> 42
f(None)-> None

请记住,这是一个简化的示例。实际上,它是一个类的 __init__(...) 函数,具有多个位置参数,我希望在本示例中将其处理为 c

最佳答案

这种情况下的常见做法是使用您不想返回的特定哨兵值。

class Sentinel():
    pass


_sentinel = Sentinel()

# _sentinel = object()  # this is the option too

def f(x=_sentinel):
    return 42 if x is _sentinel else x

assert f() == 42
assert f(None) is None
assert f(5) == 5

关于python - 如何区分默认参数和提供默认值的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67202314/

相关文章:

function - 使用默认值和/或没有特定顺序的 Erlang 函数调用

php - 根据先前的参数获取默认参数的值

python - 无论如何检测 Python SocketServer.TCPServer 中的客户端断开连接?

python - 将修改后的破折号数据表保存到数据框

python - 如何构建标准 Python 项目(模块、库)以供将来在 Google App Engine 中使用?

c++ - 如果 C++11 的 lambda 表达式支持默认参数怎么办?

python - fb预言家 : Predict a future holiday

python - 检查列表中的每个值是否存在于单个查询中给定的 Django 模型表中

c++ - 使用默认参数为模板函数起别名

python - 包装函数而不破坏默认参数