Python的可变长参数

一、*args和**kwargs的概念

1、可以接收所有的实参,就是万能参数,也叫可变长参数,比如: *args,**kwargs

2、*的使用定义

  • 函数定义时: *代表聚合
  • 合数调用时: *代表打散(拆包)

3、*args:表示可以接收任意个数的位置参数,接收的参数之间以逗号隔开

  • args 约定成俗的叫法,换成其他名字也没有问题,只不过用的多了都叫这个名字
  • 函数定义时一个星号(*)表示聚合,将所有的位置参数聚合成一个元组,赋值给了args这个变量
  • 传入一个列表进去会被当成元组的一个元素
def test(*args):
    print("args=",args)
    print("args type:",type(args))

test(1,2,3)
# args= (1, 2, 3)
# args type: <class 'tuple'>

test([1,2,3]) 
# 传入一个列表进去会被当成元组的一个元素
# args= ([1, 2, 3],)
# args type: <class 'tuple'>

4、**kwargs:

  • kwargs 约定成俗的叫法,换成其他名字也没有问题,只不过用的多了都叫这个名字
  • 函数定义时两个星号(**)表示聚合,将所有的关键字参数聚合成一个字典,赋值给了kwargs这个变量
def test(**kwargs):
    print("kwargs=",kwargs)
    print("kwargs type:",type(kwargs))

test(sex="boy",name="liming")
# kwargs= {'sex': 'boy', 'name': 'liming'}
# kwargs type: <class 'dict'>

二、正向传参和逆向传参

1、正向传参

  • *args和**kwargs混合使用,位置参数和关键字参数一 一传入到函数中
def test(*args,**kwargs):
    print("args=",args)
    print("args type:",type(args))
    print("kwargs=",kwargs)
    print("kwargs type:",type(kwargs))

test(1,2,3,sex="boy",name="liming")
# args= (1, 2, 3)
# args type: <class 'tuple'>
# kwargs= {'sex': 'boy', 'name': 'liming'}
# kwargs type: <class 'dict'>

2、逆向传参

  • 在程序已有列表、元祖、字典等对象的前提下,把他们的元素拆开传给函数
  • 逆向参数需要在传入的列表、元组参数之前添加一个星号 ,在字典参数之前添加两个星号
  • 不管是一颗星还是两颗星在函数调用时都表示打散传入的实参的所有元素到函数中
def test1(*args):
    print("args=",args)
    print("args type:",type(args))
    print()

a = [4,5,6]
test1(*a)
# args= (4, 5, 6)
# args type: <class 'tuple'>

test1(*[1,2,3])
# args= (1, 2, 3)
# args type: <class 'tuple'>


def test2(**kwargs):
    print("kwargs=",kwargs)
    print("kwargs type:",type(kwargs))
    print()
    
b={"name":"lixiao","age":18}
test2(**b)
# kwargs= {'name': 'lixiao', 'age': 18}
# kwargs type: <class 'dict'>
    
test2(**{"name":"lixiao","age":18})
# kwargs= {'name': 'lixiao', 'age': 18}
# kwargs type: <class 'dict'>
posted @ 2020-06-28 00:07  Lyzin  阅读(345)  评论(0)    收藏  举报