首页 > 其他 > 详细

8.5 传递任意数量的实参

时间:2021-01-18 14:40:35      阅读:13      评论:0      收藏:0      [点我收藏+]

有时候预先不知道函数需要接受多少个实参,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‘}
>>> 
说明:返回的字典包含用户的名、姓,还有求学的地方和所学专业。调用这个函数不管额外提供了多少个键-值对都能正确处理

 

8.5 传递任意数量的实参

原文:https://www.cnblogs.com/ylzchs/p/14292177.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!