Python中的 * 和 ** 的作用和含义

python中的*和**被称为打包和解包参数,主要作用是能够让函数支持任意数量的参数,但是在函数定义和调用中,有着不同的使用场景,具体看下面的例子

打包参数

作为打包参数时,一般在函数形参定义时使用

  • 的作用:在调用函数时,将传给函数的所有位置的实参收集到一个元组中,并将该元组作为一个整体赋值给函数形参
def func(*args):print(args)>>>func(1,2,3,4)
(1,2,3,4)

**的作用:在调用函数时,将传给函数的所有位置的实参收集到一个字典中,并将该字典赋值给形参

def func(**kwargs):print(kwargs)>>>func(a=1,b=2)
{'a':1,'b':2}

解包参数

作为解包参数时,一般在函数实参传入时使用
*的作用:在函数调用时,*能够将list或元组解包成不同的参数

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

**的作用:在函数调用中,**会将已经打包好的字典,解包成独立的key-value对,并将解包后的参数传给函数形参

def func(a,b,c,d):print(a,b,c,d)>>> kwargs = {"a":1,"b":2,"c":3,"d":4}
>>>func(**kwargs)
1 2 3 4

经典问题:func(*argc,**kwargc)中 *argc与 **kwargc的作用是什么?

有个上面的铺垫,显然这里*argc是tuple的打包参数,**kwargc是dict的打包参数
举个例子

def foo(*args,**kwargs):print ('args=',args)print ('kwargs=',kwargs)print ('**********************') if __name__=='__main__':foo(1,2,3)foo(a=1,b=2,c=3)foo(1,2,3,a=1,b=2,c=3)foo(1,'b','c',a=1,b='b',c='c')
args= (1, 2, 3)
kwargs= {}
**********************
args= ()
kwargs= {'a': 1, 'b': 2, 'c': 3}
**********************
args= (1, 2, 3)
kwargs= {'a': 1, 'b': 2, 'c': 3}
**********************
args= (1, 'b', 'c')
kwargs= {'a': 1, 'b': 'b', 'c': 'c'}
**********************

增加难度的例子

def foo(*args,**kwargs):print ('args=',args)print ('kwargs=',kwargs)print ('**********************') v = (1,2,4)
d = {'a':1, 'b':12}
# 需要注意当打包参数的输入本身就是一个整体的tuple或者tuple时,传给形参后其实是会再将其打包一次
foo(v)
foo(d)
foo(v,d)

输出

args= ((1, 2, 4),)
kwargs= {}
**********************
args= ({'a': 1, 'b': 12},)
kwargs= {}
**********************
args= ((1, 2, 4), {'a': 1, 'b': 12})
kwargs= {}
**********************

再增加难度的例子
在函数定义时:*表示打包,在函数体内部时,*表示的其实是解包

def foo(*argc,**kwargc):# 未解包参数print(argc)# 在函数体内解包后的参数print(*argc)v = (1,2,4)
d = {'a':1,'b':2}
foo(v,d)

输出

((1, 2, 4), {'a': 1, 'b': 12})
(1, 2, 4) {'a': 1, 'b': 12}

再再再增加难度的例子
打包和解包参数并不能脱离函数而存在

c = {"name":'zhang',"age":2}>>> **c # 打包和解包参数不能单独使用
>>> "Name:{name},Age:{age}".format(**c)
'Name:zhang, Age:2'

【python】——Python中的*和**的作用和含义相关推荐

  1. Python对象中__del__方法起作用的条件详解

    对象的__ del __是对象在被gc消除回收的时候起作用的一个方法,它的执行一般也就意味着对象不能够继续引用. 示范代码如下: class Demo: def __del__(self): prin ...

  2. Python函数中的 **、* 操作符作用

    一.函数定义时形参前使用 1.*表示的是将调用时的多个参数放入元组中: def func(*args):print(args) 当用func(1,2,3)调用函数时,参数args就是元组(1,2,3) ...

  3. python 神经网络中隐藏层的作用是什么?

    引用文章1: hidden layer隐藏层的自我理解 https://blog.csdn.net/c45449210/article/details/82957455 引用文章2: 对隐藏层的简单理 ...

  4. python函数中参数前面的*和**的含义

    def func(a,b=1,*args,**kwargs):      #单星号(*):*agrs将所以参数以元组(tuple)的形式导入,双星号(**):**kwargs将参数以字典的形式导入 p ...

  5. c++中system(pause)的作用和含义

    简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 . 在进行C/C++编程的时候,在运行程序查看输出效果时,会出现窗口闪一下就关闭的情况. 在C语言中一般通过添加get ...

  6. c语言 system(quot;pausequot;);,c++中system(quot;pausequot;)的作用和含义,systempause

    c++中system("pause")的作用和含义,systempause 简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 . 在进行C/C++编 ...

  7. pythonreshape函数三个参数_Python Numpy中reshape函数参数-1的含义

    python numpy中reshape函数参数-1的含义,新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等.一个参数为-1时,那么reshape函数会根据另一个参 ...

  8. 浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  9. python编程中的if __name__ == 'main': 的作用和原理

    <背景> 在大多数编排得好一点的脚本或者程序里面都有这段 if __name__ == 'main': <这段代码的功能> 一个python的文件有两种使用的方法: ➤第一是直 ...

最新文章

  1. 创建function实现hive表结果导出到mysql
  2. iOS Xcode8的适配
  3. Android SQLite (三 ) 全面详解(一)
  4. Python开发技巧-使用Python生成HTML表格
  5. 【机器视觉】 global算子
  6. Linux 0-1 修改主机名及IP地址
  7. mysql查询无主键的表的方法:
  8. python3速查参考- python基础 3 - - while循环实例 + Continue break的应用 + 列表的初步学习...
  9. 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决的方法
  10. MCSA / Windows Server 2016 PowerShell DSC
  11. 2022年潜江中级工程师职称申报材料和申报渠道是什么呢?甘建二
  12. CF538H Summer Dichotomy
  13. gif图片过大怎么压缩?gif图怎么压缩大小?
  14. 服务器光纤信号灯,光纤收发器的六个指示灯都代表什么?
  15. 如何提高程序的可移植性
  16. 计算机用鼠标画图,实现鼠标在电脑上画画
  17. YOLO系列网络训练数据准备工具—Yolo_mark
  18. 初一下册计算机教案,七年级信息技术下册教案
  19. GitHub Universe 直播 | Enterprise Day 2 日程
  20. 图形学论文:《A subdivision algorithm for computer display of curved surfaces》细分曲面的计算方法

热门文章

  1. 高师培训计算机心得体会,培训学习心得体会范文
  2. 信息安全技术小测试08设备与环境安全
  3. Win2003集群简介
  4. 全网通报:数模国赛作弊的后果
  5. list redis 怎样做排行_Redis中5种数据结构的使用场景介绍
  6. SQL注入--报错和盲注
  7. 怀化学院1901班灭霸组项目设计博文
  8. 美术 2.1 DCC工具链与引擎工具链
  9. matlab在能量守恒中的应用,MATLAB在《大学物理》课程实践教学中的应用分析
  10. 屏幕录像软件使用心得