对python中的装包与解包实例详解

作者:Python之简 时间:2022-05-08 11:57:59 

*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}

来源:https://blog.csdn.net/qq_1290259791/article/details/80964432

标签:python,装包,解包
0
投稿

猜你喜欢

  • 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。

    2023-07-01 00:38:21
  • 如何把图片上传到数据库中并显示出来?

    2009-11-06 13:50:00
  • 基于Python实现有趣的象棋游戏

    2022-06-11 20:37:15
  • python取数作为临时极大值(极小值)的方法

    2021-02-27 10:32:01
  • python使用Plotly绘图工具绘制散点图、线形图

    2022-06-24 08:11:50
  • Python @property使用方法解析

    2021-10-27 05:42:46
  • python的迭代器,生成器和装饰器你了解吗

    2024-01-02 12:45:12
  • 关于团队建设以及网站建设的琐事

    2009-03-19 13:31:00
  • 手机验证设计感悟

    2011-01-20 19:55:00
  • 解决IIS出现Active Server Pages错误“ASP 0201”

    2009-05-25 18:04:00
  • 未知高度的图片垂直居中

    2010-12-17 12:36:00
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结

    2012-08-21 10:22:21
  • 特别推荐:Web开发常用速查手册大全(100+)

    2011-05-06 12:44:00
  • OracleEXP和IMP用法和介绍

    2010-07-28 13:18:00
  • 索引在Oracle中的应用深入分析

    2023-07-04 19:50:49
  • 设计高效的faq页面

    2011-06-10 13:13:00
  • 利用Python/R语言分别解决金字塔数求和问题

    2021-09-06 06:29:14
  • Python while、for、生成器、列表推导等语句的执行效率测试

    2021-03-05 02:17:54
  • python GUI库图形界面开发之PyQt5开发环境配置与基础使用

    2023-11-16 04:45:22
  • asp 使用正则表达式替换word中的标签,转为纯文本

    2011-02-28 10:49:00
  • asp之家 网络编程 m.aspxhome.com