如何在Python中的一个函数调用中使用默认值和任意参数?

Yen*_*eni 4 python arguments function default-value

我正在学习Python.

我了解了默认值和任意参数.

所以,我创建了一个函数,它有一个提供默认值的参数,另一个参数有一个任意数量的参数.

def make_pizza(size=15,*toppings):
    """Summerize the pizza that we are about to make."""
    print("\nMaking a " + str(size) + 
    "-inch pizza with the following toppings: ")
    for topping in toppings:
        print("- " + topping)


make_pizza('onion','shrimp','goda cheese','mushroom' )
make_pizza(17,'ham','extra meat','sweet con','pepperoni')
Run Code Online (Sandbox Code Playgroud)

在第一次函数调用时,我想使用"size"参数的默认值"15"和"*toppings"任意参数.

但是,我无法弄清楚如何做到这一点.

当我调用具有多个参数的函数时,有人能告诉我,如何在一个函数调用中使用参数的默认值和任意参数?

如果您对我的英语感到不舒服,请提前抱歉(我不是本地人.)

Mar*_*ers 6

使用和不使用默认值混合参数确实会令人困惑.参数是函数定义中使用的名称,参数是传递给调用的值.

调用,Python将永远填补位置参数,所有参数包括默认值的名称.size这里只是另一个参数,即使它有一个默认值.您还可以name=value在调用中使用语法将参数值分配给特定参数(无论它们是否具有默认值).但你不能告诉Python不要分配一些东西size,而不是你当前的函数定义,因为*toppings参数之前的所有东西总是一个常规的位置参数.

*toppings参数仅所有其他参数都已接收到值捕获任何位置参数.所以'onion'分配给size,并将余数分配给*toppings.

在Python 3,你可以让size一个只有关键字的参数,通过将它们作为name=default *toppings名称,或为空*:

def make_pizza(*toppings, size=15):
Run Code Online (Sandbox Code Playgroud)

现在size只能通过带有size=<new value>关键字参数语法的调用进行设置.

在Python 2中,您只能使用**kwargscatch-all参数捕获此类关键字参数,之后您需要查看该字典size:

def make_pizza(*toppings, **kwargs):
    size = kwargs.get('size', 15)  # set a default if missing
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都必须记住显式命名size,并在位置参数之后放置这些显式命名的关键字参数:

make_pizza('ham', 'extra meat', 'sweet con', 'pepperoni', size=17)
Run Code Online (Sandbox Code Playgroud)