08-不定长函数

Posted 每天进步一点点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了08-不定长函数相关的知识,希望对你有一定的参考价值。

在开发过程中,我们需要计算两个数的和,代码如下:

[email protected]:/home/python/codes/python基础-05# cat test.py 
#-*- coding:utf-8 -*-
def sum_2_nums(a,b):
    result = a+b
    print("result=%d"%result)

num1 = int(input("第1个数:"))
num2 = int(input("第2个数:"))
sum_2_nums(num1,num2)

[email protected]:/home/python/codes/python基础-05# python3 test.py 
第1个数:1
第2个数:2
result=3

但是如果我们想计算n个数的和,那么代码需要怎么写呢?

[email protected]:/home/python/codes/python基础-05# cat test.py 
#-*- coding:utf-8 -*-
def sum_n_nums(a,b,*args):  #在这里定义的函数中携带三个参数,a,b,args,那么这个*args是啥呢?表示都存放在*args,变量名任叫args,*代表着对python解释器说:如果传递的实参个数大于形参的个数,剩下的都给#args
    result = a+b
    for temp in args:
        result += temp
    print("result=%d"%result)

sum_n_nums(11,22,33,44,55)

[email protected]:/home/python/codes/python基础-05# python3 test.py 
result=165

让我们来具体的来看一下*args是什么东西:

[email protected]:/home/python/codes/python基础-05# cat test.py 
#-*- coding:utf-8 -*-
def sum_n_nums(a,b,*args):  #*args表示命名函数
    print(a)
    print(b)
    print(args)

sum_n_nums(11,22,33,44,55)

[email protected]:/home/python/codes/python基础-05# python3 test.py 
11
22
(33, 44, 55)  #元组,也就是说*告诉python解释器,如果有多传进来的值,都交给*args,然后以元组的形式保存起来
[email protected]:/home/python/codes/python基础-05# cat test.py 
#-*- coding:utf-8 -*-
def sum_n_nums(a,b,*args):
    print(a)
    print(b)
    print(args)

sum_n_nums(11,22,33)

[email protected]:/home/python/codes/python基础-05# python3 test.py 
11
22
(33,)  #这个是什么鬼,原来当元组只有一个参数的时候,需要在后面添加一个“,”号,整体才可以称为元组,否则别人也不知道这是什么东西
[email protected]:/home/python/codes/python基础-05# cat test.py 
#-*- coding:utf-8 -*-
def sum_n_nums(a,b,*args):
    print(a)
    print(b)
    print(args)

sum_n_nums(11,22)

[email protected]:/home/python/codes/python基础-05# python3 test.py 
11
22
()  #因为在调用函数的时候只是传递了两个参数

字典形式参数

[email protected]:/home/python/codes/python基础-05# cat test.py 
#-*- coding:utf-8 -*-
def sum_n_nums(a,b,*args,**kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)

sum_n_nums(11,22,33,name=xiaoyafei,age=19)  #有的人可就纳闷了,怎么调用函数还有带变量名的,在这里解释一句,**kwargs是字典形式参数,如果传递了多余的参数,而多余的参数面前是不带变量名的,统统都给args,
否则都交给kwargs,并且是以字典的形式保存的
[email protected]:
/home/python/codes/python基础-05# python3 test.py 11 22 (33,) {name: xiaoyafei, age: 19}

总结

*args表示告诉python解释器这个变量可以保存没有名字的变量的值

**kwargs表示告诉python解释器可以保存实参里带有名字的参数

拆包

[email protected]:/home/python/codes/python基础-05# cat test.py 
#-*- coding:utf-8 -*-
def sum_n_nums(a,b,c=33,*args,**kwargs):
    print(a)
    print(b)
    print(c)
    print(args)
    print(kwargs)
A = [11,22,33]
B = {"name":"laowang","age":20}
sum_n_nums(11,22,33,*A,**B)  

[email protected]:/home/python/codes/python基础-05# python3 test.py 
11
22
33
(11, 22, 33)
{name: laowang, age: 20}

 拆包总结

1.如果想往函数里传递的是元组里的内容/字典里的内容,将来在调用的时候再元组前写上*,在字典面前写上**

2.*和**表示拆包,把元组拆成一个一个的值,把字典拆成一个一个的key value

3.如果没有写*和**,那么就会当成一个普通的值扔到args里

4.在实参里写入*和**表示拆包,把里面的值当做参数传递

 

以上是关于08-不定长函数的主要内容,如果未能解决你的问题,请参考以下文章

python-输入不定长参数函数传值

Python 不定长参数 *argc/**kargcs

Python 函数声明和调用

python中函数的不定长参数

python函数不定长参数

C语言 函数不定长参数