用于指定其存在/不存在的默认参数的惯用方法

时间:2011-02-08 17:59:57

标签: python default-arguments

我经常看到python代码采用默认参数,并且在未指定时会有特殊行为。

如果我想要这样的行为:

def getwrap(dict, key, default = ??):
    if ???: # default is specified
        return dict.get(key, default)
    else:
        return dict[key]

如果我要自己动手,我最终会得到类似的东西:

class Ham:
    __secret = object()
    def Cheese(self, key, default = __secret):
        if default is self.__secret:
            return self.dict.get(key, default)
        else:
            return self.dict[key]

但是当我确实有一个标准时,我不想发明一些愚蠢的东西。在Python中这样做的惯用方法是什么?

2 个答案:

答案 0 :(得分:6)

我通常喜欢

def getwrap(my_dict, my_key, default=None):
    if default is None:
        return my_dict[my_key]
    else:
        return my_dict.get(my_key, default)

但当然这假设None永远不是有效的默认值。

答案 1 :(得分:1)

您可以根据*args and/or **kwargs执行此操作。

以下是基于getwrap的{​​{1}}的替代实现:

*args

这就是行动:

def getwrap(my_dict, my_key, *args):
    if args:
        return my_dict.get(my_key, args[0])
    else:
        return my_dict[my_key]