我经常看到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中这样做的惯用方法是什么?
答案 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]