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"任意参数.
但是,我无法弄清楚如何做到这一点.
当我调用具有多个参数的函数时,有人能告诉我,如何在一个函数调用中使用参数的默认值和任意参数?
如果您对我的英语感到不舒服,请提前抱歉(我不是本地人.)
使用和不使用默认值混合参数确实会令人困惑.参数是函数定义中使用的名称,参数是传递给调用的值.
当调用,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)