前言
Python中传递可变参数的方式有两种,位置参数(positional argrment)和关键词参数(keyword argument)。
本文主要讲魔法参数 *args和 **kwargs 的如何使用,如何将不定数量的参数传递给一个函数和调用一个函数。
一、*args 和 **kwargs 是什么?
- *args 和 **kwargs 都是python中的可变参数。
- *args可以用来表示任何多个无名参数,本质上是tuple类型。
- **kwargs可以用来表示关键字参数,本质上是dict类型。
def func1(*args,**kwargs):
print(type(args))
print(args)
print(type(kwargs))
print(kwargs)
func1(1,2,'hello world',a=4,b=6,c='oo',d=[])
- *args和 **kwargs 重要是前面的*,你也可以写 *var和**vars,而写成 *args和 **kwargs 只是程序员通俗写法。
def func1(*var,**var2):
print(type(var))
print(var)
print(type(vars))
print(vars)
func1(1,2,'hello world',a=4,b=6,c='oo',d=[])
运行结果跟上面的使用*args和 **kwargs的一致。
- *args参数必须在**kwargs前面,因为位置参数必须在关键词参数前面。
如果把**kwargs放在*args前面,会报错:无效引用。
def func1(**kwargs,*args):
print(type(args))
print(args)
print(type(kwargs))
print(kwargs)
func1(a=4,b=6,c='oo',d=[],1,2,'hello world')
二、*args 的用法
打包参数:将不定数量的参数传递给一个函数
举例1: 将非键值的可变数量的参数列表给一个函数。
def func1(*args):
for i in args:
print("arg throuth args:{}".format(i))
func1(1,2,3,4,5)
举例2: 函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把还未分配出去的实参以元组形式打包(pack),分配给那个带∗的形参。
def func1(x,*args):
print("a:{}".format(x))
print("number:{}".format(args))
print(type(args))
func1(1,2,3,4,5)
从例子中可以看出,args接受了实参变成了(2,3,4,5),第一个参数1被形参接受走了。
def func1(x,y,*args):
print("a:{}".format(x))
print("b:{}".format(y))
print("number:{}".format(args))
print(type(args))
func1(1,2,3,4,5)
从例子中可以看出,args接受了实参变成了(3,4,5),第一个参数1被形参x接受走了,第二个参数2被形参y接受走了。
举例3: 如果把*args放在位置参数前面,需要将在参数传入时,明确定义 *args后面的位置参数定义,否则会报错。
把 *args放在前面
def func1(*args,x,y):
print("a:{}".format(x))
print("b:{}".format(y))
print("number:{}".format(args))
print(type(args))
func1(1,2,3,x=4,y=5)
把 *args放在中间
def func1(x,*args,y):
print("a:{}".format(x))
print("b:{}".format(y))
print("number:{}".format(args))
print(type(args))
func1(1,2,3,4,y=5)
拆分参数:调用一个函数
*args是把打包了的参数拆成单个的,依次赋值给函数的形参。
举例
def func1(arg1,arg2,arg3):
print(arg1,'\n',arg2,'\n',arg3)
args=[1,2,3]
func1(*args)
三、**kwargs 的用法
打包参数:将不定数量的参数传递给一个函数
**kwargs可以用来发送一个不定长度键值对的字典参数给一个函数。
举例
def func1(**kwargs):
for key,value in kwargs.items():
print("{0}=={1}".format(key,value))
func1(a=4,b=6,c='oo',d=[])
拆分参数:调用一个函数
**kwargs是把字典的键值拆成单个的,依次赋值给函数的形参。
举例
def func1(arg1,arg2,arg3):
print(arg1,'\n',arg2,'\n',arg3)
kwargs={'arg1':1,'arg2':2,'arg3':3}
func1(**kwargs)
四、位置参数、*args 和 **kwargs 的组合使用
位置参数、*args、**kwargs 三者的顺序 必须是: 位置参数、*args、**kwargs
举例
def func1(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
func1(1,2,3,4,a='hh',b='worl',c='soda')
文章来源:https://www.toymoban.com/news/detail-741050.html
参考文档:
https://blog.csdn.net/GODSuner/article/details/117961990
https://zhuanlan.zhihu.com/p/51236818文章来源地址https://www.toymoban.com/news/detail-741050.html
到了这里,关于【python基础】魔法参数*args, **kwargs的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!