有时候预先不知道函数需要接受多少个实参,python允许函数从调用语句中收集任意数量的实参。
"""
这是一个制作比萨的函数,它需要接受很多配料,但无法预先确定顾客要多少种配料
函数中形参名*toppings,"*"功能是创建一个名为toppings的空元组,并将收的的所有值都封装到这个元组中
"""
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
print(toppings)
make_pizza("peperoni")
make_pizza("mushrooms","green peppers","extra cheese")
运行结果:
>>>
======================== RESTART: D:/python学习/8.5.py ========================
('peperoni',)
('mushrooms', 'green peppers', 'extra cheese')
>>>
现在我们可以用循环语句,对配料表进行遍历,并对顾客点的比萨进行描述:
"""
这是一个制作比萨的函数,它需要接受很多配料,但无法预先确定顾客要多少种配料
函数中形参名*toppings,"*"功能是创建一个名为toppings的空元组,并将收的的所有值都封装到这个元组中
"""
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
print("\nMakeing a pizza with the following toppings:")
for topping in toppings:
print("-"+topping)
make_pizza("peperoni")
make_pizza("mushrooms","green peppers","extra cheese")
运行结果:
>>>
======================== RESTART: D:/python学习/8.5.py ========================
Makeing a pizza with the following toppings:
-peperoni
Makeing a pizza with the following toppings:
-mushrooms
-green peppers
-extra cheese
>>>
8.5.1 结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量 实参的形参放在最后。python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。
例如:前面的函数还需要加一个表示比萨尺寸的实参 ,必须将该形参放在形参*toppings的前面。
"""
这是一个制作比萨的函数,它需要接受很多配料,但无法预先确定顾客要多少种配料
函数中形参名*toppings,"*"功能是创建一个名为toppings的空元组,并将收的的所有值都封装到这个元组中
"""
def make_pizza(size,*toppings):
"""概述要制作的比萨"""
print("\nMakeing a "+str(size)+"-inch pizza with the following toppings:")
for topping in toppings:
print("-"+topping)
make_pizza(16,"peperoni")
make_pizza(12,"mushrooms","green peppers","extra cheese")
运行结果:
>>>
======================== RESTART: D:/python学习/8.5.py ========================
Makeing a 16-inch pizza with the following toppings:
-peperoni
Makeing a 12-inch pizza with the following toppings:
-mushrooms
-green peppers
-extra cheese
>>>
8.5.2 使用任意数量的关键字实参
有时候需要接受任意数量任意类型的信息,可将函数编写成能够接受任意数量的键-值对。
"""函数 build_profile()的定义要求提供名和姓,同时允许用户根据需要提供任意数量的名称-值对。
形参**user_info,两个*的功能是创建一个名为user_info的空字典,并将收集到的所有名称-对都封装到这个字典中。
在该函数中可以像访问其他字典那样访问user_info中的名称-值对。
"""
def build_profile(first,last,**user_info):
"""创建一个字典,其中包含我们知道的有关用户的一切"""
profile={}
profile["first_name"]=first
profile["last_name"]=last
for key,value in user_info.items():
profile[key]=value
return profile
user_profile=build_profile("albert","einstein",location='princeton',field='physics')
print(user_profile)
运行结果:
>>>
================== RESTART: C:/Users/admin/Desktop/8.5.2.py ==================
{'first_name': 'albert', 'last_name': 'einstein', 'field': 'physics', 'location': 'princeton'}
>>>
说明:返回的字典包含用户的名、姓,还有求学的地方和所学专业。调用这个函数不管额外提供了多少个键-值对都能正确处理
浙公网安备 33010602011771号