Python函数中不定长参数

定义

在函数的形参列表中:

  • *args元组存储在函数调用时传入的所有额外的数值,元组名为args;
  • **kwargs字典存储在函数调用时传入的所有等式值,字典名为kwargs

之后就是在函数内调用这两个变量了,元组和字典的具体使用可以参看我的另一篇文章Python高级变量类型
举例:

def func(*args,**kwargs):   
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)

func(1,2,3,4,5,name = '小明',age = 23)

运行结果:

注释: 这里的*args**kwargs不是必须为args和kwargs,也可以自己定义为*XX*XXX,但是通常情况下,Pycharm自动提示不香么?

实例

普通参数和不定长参数同时存在

举例1:

def func(a,b,*args,**kwargs):
    print('a的值为:',a)
    print('b的值为:',b)
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)
    
func(1,2,3,4,5,name = '小明',age = 23)    # 一一对应,额外的给args和kwargs

运行结果:
在这里插入图片描述

  • 这里可以很明显的发现,形参列表和实参列表是一一对应的关系,将实参一个一个传入形参中,1赋值给a,2赋值给b,3,4,5没有变量可以赋值,则作为额外的数值存放在元组args,之后的name和age等式也是一样的道理

举例2:

def func(a,b,*args,c,**kwargs):   # 在args和kwargs加入另外一个形参
    print('a的值为:',a)
    print('b的值为:',b)
    print('c的值为:',c)
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)

func(1,2,3,4,5,name = '小明',12,age = 23)

运行结果:
在这里插入图片描述

  • 知道上一个例子,这里报错就很容易理解,在arga右边有一个普通形参c,当实参传入额外数据的时候,传入3,4,5,12,到底是哪一个数值应该赋值给c呢,代码就会发生歧义,产生错误。
  • 总结: 形参列表中,在args或者wkargs的右边都是不能存在其他的普通参数的,这一点可以结合C++中,函数形参列表中含有默认形参值得右边不可存在普通参数的性质一起类别学习。

普通参数和不定长参数不同时存在

结合上一块例子可以知道,当普通参数和不定长参数不同时存在时,可以只存在args,也可只存在wkargs,当然两者也可都同时存在,且两者顺序不可颠倒。

举例1:

def func(*args,**kwargs):
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)

func(1,2,3,4,5,name = '小明',age = 23)

运行结果:
在这里插入图片描述
举例2:

def func(*args):
    print("args元组为:",args)
    
func(1,2,3,4,5)

运行结果:
在这里插入图片描述

应用

计算不定长参数的和

def func(*args):
    print("args元组为:",args)
    s = 0
    for i in args:
        s += i
    print("和为:",s)

func(2,3,4,7,2,3)
func()

运行结果:
在这里插入图片描述

  • 这里最后输出的时空元组,别看错了,所以和也是0
  • 针对不定长参数函数的操作,牢记args是元组,kwargs是字典就可以了,具体两种Python高级变量类型的使用可以参看我的另一篇文章《Python高级变量类型》
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐