返回顶部

请叫我杨先生

导航

python基础之参数*args,**kwargs

python基础之参数*args,**kwargs

python中的参数是如何传递的?


# 将未拆包的数据进行传参
def run(a,*args):
   #第一个参数传给了a
  print(a)
  # args是一个元组,里面是2和3两个参数
  print(args)
  # *args是将这个元组中的元素依次取出来
  print("对args拆包:",*args)# *args 相当于 a,b = args

run(1,2,3)

得到的结果是:

1
(2, 3)
对args拆包: 2 3

也就是说其实args就是一个tuple,传入的参数都会被当成tuple
还有一个其他用法

def func(*args,**kwargs): 
    print(type(args),args,type(kwargs),kwargs) 

def func2(a,b,c,d): 
    print(a,b,c,d)

if 0 :
    func() 
    print("得到的结果是<class 'tuple'> () <class 'dict'> {}") 
    '''在python中,*arg与**kwargs用于函数定义时,均为可变参数,*arg表示任意多个无名参数,
    类型为tuple;**kwargs表示关键字参数,为dict。'''

#用法一 用于函数定义
if __name__ == "__main__":
    func(1,2,3,4,5,a=1,b=2,c=3)
    '''<class 'tuple'> (1, 2, 3, 4, 5) <class 'dict'> {'a': 1, 'b': 2, 'c': 3}'''
    '''使用时需将*arg放在**kwargs之前,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误。'''
#用法二 用于函数调用 
    text1 = (1,2,3,4) 
    text2 = [1,2,3,4]
    text3 = {1,2,3,4}
    text4 = {'a':1,'b':2,'c':3,'d':4}

    func2(*text1),func2(*text2),func2(*text3),func2(**text4)

'''
*会以单个元素的形式解包序列(如元组、列表、集合),使其成为独立的参数。
**会以键值对的形式解包字典,使其成为独立的关键字参数。
'''

posted on 2021-12-09 20:03  YangShusen'  阅读(194)  评论(0)    收藏  举报