分享

python中的装包与解包

 xiaoyimin 2019-12-11

python中的装包与解包

*args和 **kwargs是常用的两个参数

  1. *args:用于接受多余的未命名的参数,元组类型。
  2. **kwargs:用于接受形参的命名参数,字典类型的数据。

可变参数args:

def fun(n, *args): print(n) print(args) # 未拆包 print(*args) # 进行拆包fun(1,2,3,4)
  • 1
  • 2
  • 3
  • 4
  • 5

结果:

1(2, 3, 4)2 3 4
  • 1
  • 2
  • 3
  1. 形参中的*args是接受数据的args,它是一个元组,把传入的数据放进args元组中。
  2. 函数中的args仍然是元组, *args就是将元组的数据进行拆包,一开始输入的形式。

关键字参数**kwargs

def fun(**kwargs): print(kwargs) # 未拆包 print(*kwargs) # 进行拆包fun(a=1, b=2)
  • 1
  • 2
  • 3
  • 4

结果:

{'a': 1, 'b': 2}a b
  • 1
  • 2
  1. *args用来接受多余的未命名参数, **kwargs是用来接受命名参数。
  2. 装包的意义就是把未命名的参数和命名的参数放在元组或字典中。

解包

上面介绍了args, kwargs的装包作用,起到作用的是、 这两个参数。

1. 解包的意义就是将传递给函数的一个列表,元组,字典,拆分成独立的多个元素然后赋值给函数中的参变量。2. 解压字典有两种解发,一种用*解的只有key,一种用**解的有key,value。但是这个方法**只能在函数定义中使用。
  • 1
  • 2
def fun(*args, **kwargs):    for arg in args:        print(arg)    for k, v in kwargs.items():        print(k, v)    print('-'*50)fun(a, c)   # 参数都赋值给args,并没有kwargs的参数fun(*a, *c)     # 解压的参数都赋值给args 等价为 1, 2, 3, 'a', 'b', 'c'fun(*a, **c)    # a解压给args,c解压给kwargs 等价为 1, 2, 3, 'a'=1, 'b'=2, 'c'=3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果:

[1, 2, 3]{'a': 1, 'b': 2, 'c': 3}--------------------------------------------------123abc--------------------------------------------------123a 1b 2c 3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

问题:

  1. 在传入参数时,可变参数(*)之前不能指定参数名
def myfun(a, *b):    print(a)    print(b)myfun(a=1,2,3,4)    myfun(a=1,2,3,4)             ^SyntaxError: positional argument follows keyword argument
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.函数传入实参时,可变参数(*)之后的参数必须指定参数名,否则就会被归到可变参数之中

def myfun(a, *b, c=None): print(a) print(b) print(c)myfun(1,2,3,c=4)1(2, 3)4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.一个函数想要使用时必须明确指定参数名,可以将所有参数都放在可变参数之后

def myfun(*, a, b):    print(a)    print(b)myfun(a=1, b=2)12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.关键字参数都只能作为最后一个参数,前面的参数按照位置赋值还是名称赋值都可以

def myfun(a, *b, c, **d): print(a) print(b) print(c) print(d)myfun(1, 2, w=6, c=3, d=4, e=5) # 记住可变参数(*)之前不能指定参数名1(2,)3{'w': 6, 'd': 4, 'e': 5}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多