Python默认(可变)参数初始化风格

问题描述 投票:0回答:2

让我们有一个函数

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'])

有任何充分的理由比其他人更喜欢其中一个吗?

python styles
2个回答
4
投票

实际上没有一个是正确的做法。如果你想传递一个空的成分列表怎么办?

更好的解决方案是

ingredients = ['ham', 'bacon', 'ham'] if ingredients is None else ingredients

1
投票

个人风格问题。你也可以这样做

ingredients = ingredients if ingredients else ['ham', 'ham', 'bacon', 'ham']

仅取决于谁将阅读您的代码。 就我个人而言,我对你的第二个很好

ingredients = ingredients or ['ham', 'ham', 'bacon', 'ham']
© www.soinside.com 2019 - 2024. All rights reserved.