python中一个星号(*)与两个星号(**)的作用

目录

  • python中一个星号(`*`)与两个星号(`**`)的作用
    • 一、一般用法
      • 概述:
      • 1、`*`表示乘法,`**`表示幂
      • 2、`*`表示打包解包list、tuple、str等等,`**`表示打包解包dict
    • 二、使用函数时
      • 1、在定义函数时,`*`表示收集参数,`**`表示关键字参数
      • 2、在调用函数时,`*`和`**`都是分配参数用
    • 三、扩展调用语法和*args、**kargs
    • 四、函数定义中`/,`的作用,`*,`的作用和命名关键字参数
    • 五、Reference

一、一般用法

概述:

大多数情况时,*表示打包解包list、tuple、str等等,**表示打包解包dict

1、*表示乘法,**表示幂

1 * 2, 1 ** 2
(2, 1)

2、*表示打包解包list、tuple、str等等,**表示打包解包dict

2.1、利用*进行解包

li = [1, 2, 3, 4]
print(*li)
1 2 3 4

2.2、利用*进行打包

a, b, *c = [1,2,3,4,5,6,7]
print(a, b, c)
# c收集了列表解包之后的多余值,并打包成了一个list
1 2 [3, 4, 5, 6, 7]

二、使用函数时

1、在定义函数时,*表示收集参数,**表示关键字参数

1.1、*表示收集参数
收集参数允许用户传入任意多个参数

def print_any(*arg):print(arg)print_any(1,2,3,4,5, 'halo', 'python')
(1, 2, 3, 4, 5, 'halo', 'python')

1.2、**表示关键字参数

def print_any(**kwargs):print(kwargs)print_any(a=1, b=2, c=3)
{'a': 1, 'b': 2, 'c': 3}

其实这里也可以理解为,**将任意多个关键字参数打包成了一个字典,这就是**的打包作用

2、在调用函数时,***都是分配参数用

2.1、*分配位置参数

def print_name(first, last):print("User's name is:{} {}".format(first.title(), last.title()))name = ['Shen', 'alice']
print_name(*name)
User's name is:Shen Alice

为了确保是使用的位置参数,我们传入[1,2]包含一个数字的列表测试一下

def print_name(first, last):print("User's name is:{} {}".format(first.title(), last.title()))fail_name = [1, 'alice']
print_name(*fail_name)


会报错,是因为我们把数字1当作位置参数传给了first,而数字1是没有title()方法的,所以会报错。

2.2、**分配关键字参数

def sum_any(a, b, c):print('a is',a)print('b is',b)print('c is',c)return a + b + cdic = {'c':1, 'a':2, 'b':3}
sum_any(**dic)
a is 2
b is 3
c is 1
6

这里其实就是**将一个字典解包成类似于 a=2, b=3, c=1的形式,然后将其传入函数,这就是**的解包作用。

三、扩展调用语法和*args、**kargs

在Python中函数参数的工作方式其实很简单,当你编写func(a, b, c, d=some, e=value)时,位置和关键字参数其实分别是被打包成元组和字典的,函数实际接受到的是一个元组,args和一个字典kargs,并在内部完成如下的转换:

a, b, c = args
d = kwargs.get('d', d_default_value)
e = kwargs.get('e', e_default_value)

通过一个示例来查看此过程

def say_hello_then_call(f, *args, **kwargs):print('args is', args)print('kwargs is', kwargs)print("Now I'm going to call %s"%f)return f(*args, **kwargs)def g(x, y, z=1):return (x + y) / zsay_hello_then_call(g, 1, 2, z=5)
args is (1, 2)
kwargs is {'z': 5}
Now I'm going to call <function g at 0x000001F27AD8E5E0>
0.6

四、函数定义中/,的作用,*,的作用和命名关键字参数

在python的函数定义中/,主要用于分隔前后参数的调用方式,位置参数和关键字参数的分布,在/,前面的参数只能是位置参数,在/,后面的参数只能是关键字参数。举个例子

def add_func(key1, key2, /, key3=3):return key1 + key2 + key3add_func(1, 2, key3=4)
7

*,单独分隔的参数,在*,后面的参数被称为命名关键字参数,和关键字参数的区别在于:关键字参数可以将任意多的关键字参数打包成一个dict,而命名关键字参数可以限制关键字的名字,只接受被定义的关键字,也将其打包成dict

这里没有按照要求调用命名关键字参数,会出现错误

def add_func(key1, key2, *, key3=0):return key1 + key2 + key3add_func(1, 2, 3)


使用关键字的方式调用后 ,没有出现错误

def add_func(key1, key2, *, key3=0):return key1 + key2 + key3
add_func(1, 2, key3=3)
6

五、Reference

https://blog.csdn.net/zkk9527/article/details/88675129?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
https://blog.csdn.net/xinjieyuan/article/details/108178701
https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888

python中一个星号(*)与两个星号(**)的作用相关推荐

  1. python函数的动态参数之一个星号和两个星号

    一.概述 1.python有位置参数.默认参数,这两种是最常用的参数. 2.动态参数即不限定参数个数,以一种动态的方式接受传参的个数. 3.python的动态参数有两种,分别是 ' *args '  ...

  2. python自带的shell是什么-python中执行shell的两种方法总结

    一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...

  3. python try语句例题_在Python中,一个try语句只能和一个except语句搭配。_学小易找答案...

    [单选题]言语和语言不同,言语是_____. [填空题]901x28= [判断题]在Python中,类中定义的类的成员(属性)或类方法,默认情况下都为公有的. [单选题]Outlines can be ...

  4. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  5. python中的or的两种用法

    python中的or的两种用法 python中or除了常见的和and作为判断的条件外,还有一种不多见但很实用的用法,那就是: a = b or c 在这条赋值语句中的 or 的含义是判断 b 和 c ...

  6. C++中#(一个#号)和##(两个#号)的用法和作用

    1 C++中#(一个#号)和##(两个#号)的用法和作用 1 关于一个#号: 在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作, 简单说就是对他所引用的宏变量通过替换后再其左右各加上一个双引 ...

  7. Python中字符串前“b”,“r”,“u”,“f”的作用

    原文:https://www.jb51.net/article/176601.htm 原文有bug特参考:https://www.cnblogs.com/songzhenhua/p/13236794. ...

  8. python什么意思k_对python中的*args与**kwgs的含义与作用详解

    对python中的*args与**kwgs的含义与作用详解 在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数, ...

  9. args在python中什么意思_对python中的*args与**kwgs的含义与作用详解

    在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数,用于元组,**kw是关键字参数 例如下面的代码 def fo ...

最新文章

  1. YSlow简介与使用(转)
  2. android 21点游戏代码,Android 21点
  3. python插件开发怎么扩展主程序_python扩展实现方法--python与c混和编程
  4. jdbc连接mysql的语法_JDBC连接MySQL
  5. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手
  6. JAVA50道经典编程题
  7. 与微信同行近 8 年,49 岁的张小龙去哪儿了?
  8. idou老师教你学Istio 04:Istio性能及扩展性介绍
  9. uart硬件一些小知识
  10. 【高德地图在React项目中的使用——(二)各种配置的使用】
  11. Node-RED使用指南:7:配置与设定总结:其他配置
  12. iPhone 12 发布了
  13. 史上最猛“员工”,疯狂吐槽亿万富翁老板小扎:那么有钱,还总穿着同样的衣服!...
  14. 为什么很多人吐槽谭浩强的C语言程序设计?
  15. 数值计算大作业:最小二乘法拟合(Matlab实现)
  16. 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
  17. 如果爱情可以这么美好,今生一定无悔!
  18. 【基于深度学习的脑电图识别】综述篇(二)数据采样及处理:Deep learning-based electroencephalography analysis: a systematic review
  19. IOS类似图片验证码的实现
  20. Linux网络入侵检测系统

热门文章

  1. ps3slim安装linux,PS3 Slim配置详解 新旧款真机对比
  2. [前端] 前端bootstrap col-xs-6 col-md-3的布局意思
  3. 24.多线程(等待唤醒机制,volatile,CAS 算法,线程池,定时器,设计模式)
  4. 【笔记】ARM架构和ARM芯片(一)
  5. 佛罗里达计算机科学,佛罗里达大学计算机科学专业居然这么吃香?
  6. 浏览器提示ssl证书过期怎么办
  7. 读hadoop权威指南关于hive
  8. C# 枚举高级用法之Description
  9. Halcon知识:gray_tophat 顶帽变换和底帽变换
  10. 魔兽世界怀旧服——按键精灵 Java版(自动技能,练级释放者)