Python中打包和解包(*和**)的使用详解

 更新时间:2022年08月30日 15:41:20   作者:C_小米同学  
*和**在函数的定义和调用阶段,有着不同的功能,并且,*和**不能离开函数使用,这篇文章主要介绍了Python中打包和解包(*和**)的使用详解,需要的朋友可以参考下

*和**在函数的定义和调用阶段,有着不同的功能,并且,*和**不能离开函数使用!

一、打包参数

* 的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量args

>>> def f(*args):      # * 在函数定义中使用
        print(args)
>>> f()
()
>>> f(1)
(1,)
>>> f(1, 2, 3, 4)
(1, 2, 3, 4)

我们可以看到,1,2,3,4传入的时候,*args可以把它们打包起来(这时,1,2,3,4可以看成是一个整体,相当于由四个参数变成了两个)

** 的作用:在函数定义中,收集关键字参数到一个新的字典,并将整个字典赋值给变量kwarg

>>> def f(**kwargs):        # ** 在函数定义中使用
    print(kwargs)
>>> f()
{}
>>> f(a=1, b=2)
{'a': 1, 'b': 2}

二、解包参数

* 的作用:在函数调用中,* 能够将元组或列表解包成不同的参数(打包的时候是打包成元祖,解包可以解包元祖和列表)

>>> def func(a, b, c, d):
    print(a, b, c, d)
>>> args = (1, 2, 3, 4)
>>> func(*args)     # * 在函数调用中使用
1 2 3 4
 
>>> args = [1, 2, 3, 4]
>>> func(*args)
1 2 3 4

注意:原本args是一个整体,也就是一个参数,通过*解包之后,变成了四个参数,所以函数要有4个变量来接收

** 的作用:在函数调用中,** 会以键/值的形式解包一个字典,使其成为一个独立的关键字参数

>>> def func(a, b, c, d):
    print(a, b, c, d)
>>> kwargs = {"a": 1, "b": 2, "c": 3, "d": 4}
>>> func(**kwargs)                # ** 在函数调用中使用
2 3 4

三、几点注意

1.在函数定义时, * 表示打包,在函数体内部, * 表示的却是解包

>>> def foo(*args, **kwargs):
    print(args)       #未解包参数
    print(*args)      #解包参数
>>> v = (1, 2, 4)
>>> d = {'a':1, 'b':12}
>>> foo(v, d)
((1, 2, 4), {'a': 1, 'b': 12})
(1, 2, 4) {'a': 1, 'b': 12}

 我们可以看到,在一开始,v,d作为整体被打包成了一个元祖,然后在解包回原来的形式。

 2. * 和 ** 的打包和解包并不能脱离函数而存在

>>> c = {"name": 'zhang', "age": 2}
>>> **c
SyntaxError: invalid syntax
>>> 
>>> "Name:{name}, Age:{age}".format(**c)
'Name:zhang, Age:2'

注意:print()函数只支持 *args,不支持 **kwargs

到此这篇关于Python中打包和解包(*和**)的使用详解的文章就介绍到这了,更多相关python打包和解包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 求向量的余弦值操作

    Python 求向量的余弦值操作

    这篇文章主要介绍了Python 求向量的余弦值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python curses内置颜色用法实例

    Python curses内置颜色用法实例

    在本篇文章里小编给大家整理的是一篇关于Python curses内置颜色用法实例内容,有兴趣的朋友们可以学习下。
    2021-06-06
  • python推导式的使用方法实例

    python推导式的使用方法实例

    这篇文章主要给大家介绍了关于python推导式的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python远控代码的教程详解

    python远控代码的教程详解

    大家远控还在用软件吗,其实几行代码轻松搞定,这篇文章小编就来和大家介绍一下如何使用Python实现远程控制代码,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • Python 爬虫学习笔记之单线程爬虫

    Python 爬虫学习笔记之单线程爬虫

    本文给大家分享的是python使用requests爬虫库实现单线程爬虫的代码以及requests库的安装和使用,有需要的小伙伴可以参考下
    2016-09-09
  • 零基础写python爬虫之爬虫框架Scrapy安装配置

    零基础写python爬虫之爬虫框架Scrapy安装配置

    Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发。
    2014-11-11
  • rabbitmq(中间消息代理)在python中的使用详解

    rabbitmq(中间消息代理)在python中的使用详解

    这篇文章主要介绍了rabbitmq(中间消息代理)在python中的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • django 解决自定义序列化返回处理数据为null的问题

    django 解决自定义序列化返回处理数据为null的问题

    这篇文章主要介绍了django 解决自定义序列化返回处理数据为null的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python3.5的包存放的具体路径

    python3.5的包存放的具体路径

    在本篇内容里小编给大家分享了一篇关于python3.5的包存放的具体路径相关内容,有需要的朋友们可以参考下。
    2020-08-08
  • Pytest 自动化测试框架的使用

    Pytest 自动化测试框架的使用

    本文主要介绍了Pytest 自动化测试框架的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论