*args 、**kwargs是不定参数的表达方法,一般用于函数形参。*args 、**kwargs 作为传递参数的函数,在使用过程中,可对*args 、**kwargs多个输入,但是效率或者比较麻烦,所以可使用list、tuple、dict类型的变量传递给args,kwargs,再由*args 、**kwargs作为函数参数直接传递给函数。
*args 可以用来容纳多个变量组成的list或tuple
**kwargs 可以用来容纳多个key和value的dict
那具体怎么直接将*args 、**kwargs通过list、tuple或dict传递了,来看实例:
#变量及函数定义:
dict_t = {'one':1,'two':2,'three':3} tuple_t = ('one','two','three') list_t = ['one','two','three'] def list_tuple(*args): print(args) def tdict(**kwagrs): print(kwagrs) #使用方法: list_tuple (*tuple_t) #tuple类型的变量传递给args list_tuple (*list_t) #list类型的变量传递给args tdict (**dict_t) # dict类型的变量传递给kwargs
执行结果:
('one', 'two', 'three') ('one', 'two', 'three') {'one': 1, 'two': 2, 'three': 3}
也可以使用eval的方式,eval具体介绍可在内置函数介绍中查看:https://www.cnblogs.com/pinpin/p/10287534.html
dict_t = {'one':1,'two':2,'three':3} tuple_t = ('one','two','three') list_t = ['one','two','three'] def list_tuple(*args): args = eval('args') print(args) list_tuple (list_t) list_tuple (list_t) list_tuple(dict_t)
执行结果:
(['one', 'two', 'three'],) (['one', 'two', 'three'],) ({'one': 1, 'two': 2, 'three': 3},)
使用eval的区别在于:将*args 、**kwargs当成一个字符串进行转递,当然,使用时读取数据就多一步:
list_t = ['one','two','three'] def list_tuple(*args): args = eval('args') return args tets = list_tuple (list_t) for i in range(len(tets[0])): #tets[0]第一个元素的长度,原因,eval将数据当成字符传传递 print(tets[0][i])
执行结果:
one two three