python封包和解包_对python中的装包与解包实例详解

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

*args:用于接受多余的未命名的参数,元组类型。

**kwargs:用于接受形参的命名参数,字典类型的数据。

可变参数args:

def fun(n, *args):

print(n)

print(args) # 未拆包

print(*args) # 进行拆包

fun(1,2,3,4)

结果:

1

(2, 3, 4)

2 3 4

形参中的*args是接受数据的args,它是一个元组,把传入的数据放进args元组中。

函数中的args仍然是元组, *args就是将元组的数据进行拆包,一开始输入的形式。

关键字参数**kwargs

def fun(**kwargs):

print(kwargs) # 未拆包

print(*kwargs) # 进行拆包

fun(a=1, b=2)

结果:

{'a': 1, 'b': 2}

a b

*args用来接受多余的未命名参数, **kwargs是用来接受命名参数。

装包的意义就是把未命名的参数和命名的参数放在元组或字典中。

解包

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

1. 解包的意义就是将传递给函数的一个列表,元组,字典,拆分成独立的多个元素然后赋值给函数中的参变量。

2. 解压字典有两种解发,一种用*解的只有key,一种用**解的有key,value。但是这个方法**只能在函数定义中使用。

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]

{'a': 1, 'b': 2, 'c': 3}

--------------------------------------------------

1

2

3

a

b

c

--------------------------------------------------

1

2

3

a 1

b 2

c 3

问题:

在传入参数时,可变参数(*)之前不能指定参数名

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

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

def myfun(a, *b, c=None):

print(a)

print(b)

print(c)

myfun(1,2,3,c=4)

1

(2, 3)

4

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

def myfun(*, a, b):

print(a)

print(b)

myfun(a=1, b=2)

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}

以上这篇对python中的装包与解包实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: 对python中的装包与解包实例详解

本文地址: http://www.cppcns.com/jiaoben/python/269843.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值