如何在Python中混合多个和可选参数?

时间:2017-05-19 15:49:06

标签: python python-3.x function tuples

我想用默认和多个参数编写函数。现在我有这样的想法:

def make_pizza(size=10, *toppings):
    for t in toppings:
        print("-",t)

    print('Pizza has', size, 'cm')

后来我试着打电话:

make_pizza(30, 'pepperoni')
make_pizza('pepperoni')
make_pizza(50, 'cheese', 'cucumber', 'chilli')

但结果看起来很糟糕:

- pepperoni Pizza has 30 cm Pizza has pepperoni cm - cheese - cucumber - chilli Pizza has 50 cm

如果我想在第三行打印'10'而不是意大利辣香肠,我该怎么办?

1 个答案:

答案 0 :(得分:4)

好吧,既然您使用的是Python 3,最简单的方法就是让size成为keyword-only argument

def make_pizza(*toppings, size=10):
    for t in toppings:
       print("-",t)

    print('Pizza has', size, 'cm')

请注意size=10必须关注 *toppings

现在,要指定size,您需要明确命名它:

make_pizza('pepperoni') 
make_pizza('pepperoni', size=30)

另一种选择是检查size类型,如果它是说numbers.Number的实例,则假设它是大小,否则它是一个顶部,应该添加到toppings元组的开头...并且大小应该重置为默认值。

或者您可以随时指定尺寸。

但是我更喜欢仅限关键字的参数,因为这正是它们要解决的问题。