元组变量前加 * 视为对元组解包。解包后的子内容会依次赋值给对应位置的其他变量

一个元组解包最经典的用法就是python里的两变量值互换但不借用第三中间变量:

a, b = b, a 当然这里没有 * ,此外还注意到元素数量较少不会引起歧义时,元组两侧的括号可以省略

回到题图命令里,product(A, B)相当于返回一个A,B列表中元素依次互相配对的生成器。假设里面有 5 个元组,那么在用 * 解包后就会返回 5 个元素(都是元组)。而print命令恰好是一个可以接受无限多参数的函数(作用就是把这些参数内的内容打印出来),于是你就会看到 5 个元组依次出现在屏幕上了。

扩展一下,如其他答主所说,* 也可以用来解包参数以传递给函数使用。但这其实也是利用了元组的解包特性。

例如如下代码:

def funcA(*args):

print(*args)

funcA([1,2,3], [4,5,6])

# 返回 [1, 2, 3] [4, 5, 6]

这是因为这里的参数分别是 [1,2,3] 和 [4,5,6] 两个数组。当然这个函数没有太大意义。你在很多著名库里(比如绘图的matplotlib)都会看到某些api的语法是 maplotlib.plot(x, y, key1, key2, ..., *args, **kwargs)这种形式。这里是利用了元组解包的另一个性质——元组解包可以包含一个*args关键字,将“多余”的部分塞给这个可变长的变量中,例如:( 需要注意的是,我这里是为了方便理解然而这种写法有时候不被支持,因为python的函数,必须要求所有非关键字参数出现在关键字参数之前,而这个例子里有些参数可能是关键字形式的)

c = (1, 2, 3, 4, 5)

a, *b = c

# a -> 1, b -> [2, 3, 4, 5]

c = (1, 2, 3, 4, 5)

x, *y, z = c

# x -> 1, z -> 5, y -> [2, 3, 4]

一些比较实用的应用,比如遇到 Tom = [('Age', 24), ('Gender', 'Male'), ...] 这种,如果我只想获得第一个和最后一个属性却不想理会其他的部分,就可以用上面的 * 赋值法。

arg 实际上是arguments 的缩写,即参数的复数形式。所以一般也用 args 作为一种约定俗成的写法。当然你可以用其他文字代替。

更进一步,**kwargs实际上是 key word arguments,即带关键字的参数。这时候传递给函数的是一个变长字典。于是你可以猜测 **kwargs这种写法实际上是对字典的解包,实际上它就是,例如:

a = {'a': 0, 'b': 1, 'c': 2}

b = {'d': 4}

c = dict(**a, **b)

# c -> {'a': 0, 'b': 1, 'c': 2, 'd': 4}

# 利用字典解包合并字典,注意两者的关键词不能重复

当然,在函数参数的传递过程中,你写的时候看起来像是 funcA(a=1, b=2, c=3) ,实际上funcA的参数是一个字典{'a':1, 'b':2, 'c':3}

python前面三个大于号是啥_在Python3里有的变量前面有个*号,是什么意思?相关推荐

  1. 在Python3里有的变量前面有个*号,或许你不知道,没关系,看文

    有些人很疑惑为什么在Python3里有的变量前面有个*号呢?如下图! Python不可以会无缘无故的出现这种写法,必然有他的用处! 原因分析 元组变量前加 * 视为对元组解包.解包后的子内容会依次赋值 ...

  2. 批量关闭公众号推送_微信推出“一键拒收”长期未读公众号推送功能

    近期已经写了不少关于微信的消息了,本来想换个话题休息一下,谁知道微信不休息啊,又开始内测了.7月25日,部分iOS内测微信用户会收到系统对长时间未读订阅号的提醒,并可通过提醒入口选择不接收这部分订阅号 ...

  3. python是开源的.它可以被移植_免费搜尔雅网课答案的公众号

    高等植物叶绿体的形状多为( ) [单选题]10.2019年4月18日13时01分,台湾花莲县海域发生6.7级地震.有关专家指出:"地球一直处于震动状态,震动是地球的常态."这告诉我 ...

  4. Python类三种方法,函数传参,类与实例变量

    1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的'引用' a = 1 def func(a):a = 2 func(a) print(a) # 1a = 1 def fun(a ...

  5. python 输入学生成绩大于 90为优_对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。以下代码如何限制成绩最高100分。...

    对学生成绩大于60分的,输出"合格".低于60分的,输出"不合格".以下代码如何限制成绩最高100分. System.out.println("输入成 ...

  6. python三个箭头怎么打出来_(Python3)Linux和Windows箭头键按下

    我一直在寻找一段时间,现在遍布互联网,但我似乎找不到一个独特的方式为Linux和Windows,允许捕捉箭头上下,等事件.(Python3)Linux和Windows箭头键按下 随着msvcrt包在W ...

  7. python发邮件给多个人发送消息_【Python3】 发送邮件给多人

    1.收件人邮箱msg_to=['258507328@qq.com,1501949013@qq.com,277544354@qq.com'],以列表的方式给出. 2.message['To'] =',' ...

  8. python 控制鼠标点击需要100ms为什么_用 Python3 和 OpenCV 替我玩一玩微信小游戏 — 跳一跳 (这算外挂么)...

    0 瞎弄 我知道你们喜欢先看效果 手残的我,始终跳不过你们这些超过 50 分的大佬.想起最近在用 Python 学习 ML (Mechine Learning, 机器学习) ,怎么用没学会,倒是里面神 ...

  9. python中复数采用什么方法提取实部_讲解Python3中NumPy数组寻找特定元素下标的两种方法 python3中怎样实现对一个复数取实部...

    python numpy 数组提取某一列大于某一直的数据 import numpy as npa=np.arange(9).reshape(3,3)12 a Out[31]: array([[0, 1 ...

最新文章

  1. openvas进程间通讯api与报文交互
  2. 立体匹配之NCC算法
  3. 【代码笔记】Web-JavaScript-JavaScript调试
  4. html中使用js将axios请求封装
  5. Activiti-01
  6. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些
  7. html表格展开明细,展开/折叠HTML表格
  8. 分库分表学习总结(6)——分库分表?选型和流程要慎重,否则流程会失控!
  9. SAP License:求职最受欢迎的十大技能
  10. 软件工程导论 00章数据流图与数据字典
  11. 最擅长玩《毁灭战士》的AI开源了 | 来自CMU的论文代码
  12. 这些云计算网络安全知识,你不得不知
  13. 关于金融行业网络安全解决方案,您了解多少?
  14. python风变编程和扇贝编程_到底是扇贝编程还是风变编程?
  15. iTunes备份文件路径修改方法
  16. 关于微信支付预下单【统一下单】“操作超时”问题
  17. 随感10-Transecndence超验骇客
  18. 35 漂亮的单页网页设计
  19. QT概念详解及开发入门简介
  20. OpenJ_Bailian - 2711

热门文章

  1. 让数据站住脚-浅谈用户研究中的信度与效度
  2. html哪个标记表示表格,html标记中哪个标记表示表格
  3. matlab怎么生成星座图,关于16QAM生成星座图的程序问题
  4. HDU 1493(QQpet exploratory park)
  5. IDEA安装 激活 基本使用
  6. 韩央行:英国脱欧协议被否决对金融市场影响有限
  7. LSM树的基本原理-学习笔记
  8. linux中shell的循环
  9. 美国访问学者签证DS160表格提交后,如何操作?
  10. vivado编译报错:[IP_Flow 19-167] Failed to deliver one or more file(s).