让我们有一个函数
make_sandwich
,它接受 ingredients
的列表,其默认值为 ['ham', 'ham', 'bacon', 'ham']
def make_sandwich(ingredients=['ham', 'ham', 'bacon', 'ham']):
print("Making a sandwich with ", ingredients)
但是,由于这个默认值很容易受到这个Python“可变默认参数”bug功能的影响,我们应该使用不可变的,如下所示:
def make_sandwich(ingredients=None):
# initialized ingredients here
print("Making a sandwich with ", ingredients)
所以问题来了。我知道有两种方法可以做到这一点,但我不确定哪一种被认为是更好的做法。
第一个:
if not ingredients:
ingredients = ['ham', 'ham', 'bacon', 'ham']
第二个:
ingredients = ingredients or ['ham', 'ham', 'bacon', 'ham']
我个人更常使用第二个。有时,如果参数仅使用一次,我什至会内联该参数。例如
print("Making a sandwich with ", ingredients or ['ham', 'ham', 'bacon', 'ham'])
有任何充分的理由比其他人更喜欢其中一个吗?
实际上没有一个是正确的做法。如果你想传递一个空的成分列表怎么办?
更好的解决方案是
ingredients = ['ham', 'bacon', 'ham'] if ingredients is None else ingredients
个人风格问题。你也可以这样做
ingredients = ingredients if ingredients else ['ham', 'ham', 'bacon', 'ham']
仅取决于谁将阅读您的代码。 就我个人而言,我对你的第二个很好
ingredients = ingredients or ['ham', 'ham', 'bacon', 'ham']