当前位置: 首页 > news >正文

Python3 * 和 ** 运算符

Python3 * 和 ** 运算符

https://blog.csdn.net/yilovexing/article/details/80577510

在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。

1. 算数运算

*  代表乘法

** 代表乘方

    >>> 2 * 5
    10
    >>> 2 ** 5
    32

2. 函数形参

*args 和 **kwargs 主要用于函数定义。

你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。

python函数传递参数的方式有两种:

    位置参数(positional argument)
    关键词参数(keyword argument)

*args 与 **kwargs 的区别,两者都是 python 中的可变参数:

    *args 表示任何多个无名参数,它本质是一个 tuple
    **kwargs 表示关键字参数,它本质上是一个 dict

如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。

    >>> def fun(*args, **kwargs):
    ...     print('args=', args)
    ...     print('kwargs=', kwargs)
    ...
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    args= (1, 2, 3, 4)
    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}

使用 *args

    >>> def fun(name, *args):
    ...     print('你好:', name)
    ...     for i in args:
    ...         print("你的宠物有:", i)
    ...
    >>> fun("Geek", "dog", "cat")
    你好: Geek
    你的宠物有: dog
    你的宠物有: cat

使用 **kwargs

    >>> def fun(**kwargs):
    ...     for key, value in kwargs.items():
    ...         print("{0} 喜欢 {1}".format(key, value))
    ...
    >>> fun(Geek="cat", cat="box")
    Geek 喜欢 cat
    cat 喜欢 box

3. 函数实参

如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:

    >>> def fun(data1, data2, data3):
    ...     print("data1: ", data1)
    ...     print("data2: ", data2)
    ...     print("data3: ", data3)
    ...
    >>> args = ("one", 2, 3)
    >>> fun(*args)
    data1:  one
    data2:  2
    data3:  3
    >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
    >>> fun(**kwargs)
    data1:  3
    data2:  2
    data3:  one

4. 序列解包

序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。

    >>> a, b, *c = 0, 1, 2, 3  
    >>> a  
    0  
    >>> b  
    1  
    >>> c  
    [2, 3]
————————————————
版权声明:本文为CSDN博主「极客点儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yilovexing/article/details/80577510

 

 

 

 

相关文章:

  • perforce 获取本地最近更新的Changelist
  • jenkins--slave节点
  • shell 脚本中set-x 与set+x的区别
  • 学习笔记: shell 中的 set -e , set +e 用法
  • Unreal Engine 4 C++ FString操作的几种方式
  • E4 蒙太奇 组合动画
  • AnimMontage(中文)——UE4官方文档翻译与理解
  • UE4中动画蒙太奇的合成
  • UE4 Montage 介绍
  • Mac 血泪史
  • Unity压缩Animation
  • UE4 camera忽略物体的显示
  • UE4物理模块(三):碰撞查询
  • UE4物理模块(二)---建立物体碰撞
  • C#中字符串的比较操作
  • hexo+github搭建个人博客
  • 【RocksDB】TransactionDB源码分析
  • Angular Elements 及其运作原理
  • Codepen 每日精选(2018-3-25)
  • ComponentOne 2017 V2版本正式发布
  • ESLint简单操作
  • Gradle 5.0 正式版发布
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Mysql优化
  • PHP变量
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • React16时代,该用什么姿势写 React ?
  • 从零搭建Koa2 Server
  • 蓝海存储开关机注意事项总结
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用Swoole加速Laravel(正式环境中)
  • 算法-插入排序
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 协程
  • 《天龙八部3D》Unity技术方案揭秘
  • 积累各种好的链接
  • 进程与线程(三)——进程/线程间通信
  • 如何在招聘中考核.NET架构师
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (zt)最盛行的警世狂言(爆笑)
  • (笔试题)分解质因式
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (南京观海微电子)——I3C协议介绍
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (一)u-boot-nand.bin的下载
  • (转)ABI是什么
  • .NET Core中的去虚
  • .Net MVC4 上传大文件,并保存表单
  • .Net 应用中使用dot trace进行性能诊断
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net经典笔试题
  • /var/spool/postfix/maildrop 下有大量文件
  • [ C++ ] STL---string类的使用指南
  • [c++] C++多态(虚函数和虚继承)