3.5. 可变参数

*args 接收元祖元素

**kargs 接收字典元素

3.5.1. 代码示例1

#!/usr/bin/env python
#-*- coding:utf8 -*-
def coffee(*coffeename):
    print("\n我喜欢的咖啡有:")
    for item in coffeename:
        print(item)

coffee("蓝山")
coffee("蓝山","卡布奇洛","巴西")
list1 = ["蓝山", "卡布奇洛", "巴西"]

coffee(*list1)  #解包用法

3.5.2. 代码示例2

#!/usr/bin/env python
#-*- coding:utf8 -*-
def fun_bmi(*name):
    '''
    :param name:
    :param height:
    :param weight:
    :return:根据身高和体重计算bmi指数
    '''
    for item in name:
        for args1 in item:
            name = args1[0]
            height = args1[1]
            weight = args1[2]
            print(name + "的身高" + str(height) + "米\t 体重:"+ str(weight) + "千克")
            bmi = weight/(height*height)        #计算BMI指数,公式为: "体重/身高的平方"
            print("您的BMI指数为:" + str(bmi))   #输出BMI指数
            #check身材是否合理
            print()

            if bmi < 18.5:
                print("您的体重过轻~~~@_@")
            if bmi >=18.5 and bmi <24.9:
                print("正常范围,注意保持...")
            if bmi >=24.9 and bmi <29.9:
                print("您的体重过重!!~~@_@~")
            if bmi>29.9:
                print("@_@肥胖。")

list1 = [["hujianli",1.79,65], ['huxiaojian',1.78,90], ['jianli',1.81,100]]
fun_bmi(list1)

3.5.3. 代码示例3

#!/usr/bin/env python
#-*- coding:utf8 -*-
def sign(**sign):
    for key,value in sign.items():
        print(key,'的星座是:',value)
    print()
dict1 = {"胡建力":'巨蟹座'}

dict2 = {'小健':"狮子座", '小胡':'双子座', '建力':'巨蟹座'}
sign(**dict1)       #解包,收集参数
sign(**dict2)

3.5.4. 代码示例4

#!/usr/bin/env python
#-*- coding:utf8 -*-
'''
如果参数名前加上一个星号,* 表示该餐是一个可变长参数。如果依次将所有的其他变量都赋予值之后,剩下的参数将会收集在
一个元祖中,元祖的名称就是前面带星号的参数名
'''

def change_para_num(*tpl):
    print(type(tpl))
    print(tpl)

change_para_num(1)
change_para_num(1, 2, 3)
print("演示一个同时有三种类型的参数的函数定义及调用".center(100,"*"))
def change_para_mum2(*tpl,a,b=0):
    print("tpl:",tpl)
    print("a:",a)
    print("b:",b)

change_para_mum2(1,2,3,a=5)

#定义了收集关键字参数的示例
def change_para_dct(a,b=0,**adct):
    print("adct:",adct)     #收集关键字参数到字典中,多余的关键字参数,运行时会被放入adct字典中
    print("a:",a)
    print("b:",b)

change_para_dct(1,k=3,b=2,c=3)

3.5.5. 位置参数和可变参数一起使用

代码示例

In [3]: def func3(a,b,*args):
   ...:     print(a,b)
   ...:     print(*args)
   ...:
In [4]: func3(1,2,666,777)
1 2
666 777

eg

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/21 16:49
# filename: 可变参数2.py

def show_info(seq=":", **info):
    print("---------------------info---------------")
    print("info".center(40, "-"))

    for key, value in info.items():
        print("{0}{2}{1}".format(key, value, seq))


show_info("-->", name="hujianli", age=18, sex="Man")
show_info(name="hujianli2", age=19, sex="Man", seq="-")

stu_dict = {"name": "xiaojian", "age": "18"}  # 创建字典对象
show_info(**stu_dict)

输出信息

---------------------info---------------
------------------info------------------
name-->hujianli
sex-->Man
age-->18
---------------------info---------------
------------------info------------------
name-hujianli2
sex-Man
age-19
---------------------info---------------
------------------info------------------
name:xiaojian
age:18

3.5.6. 接受任意参数的函数

In [1]: def func(*args,**kwargs):
   ...:     print(args)
   ...:     print(kwargs)
   ...:
In [2]: func(1,2,3,a=1,b=2,c=3)
(1, 2, 3)
{'c': 3, 'b': 2, 'a': 1}