邵阳网首页 > 百科 > 探究Python3中*号变量前缀的神秘原因
探究Python3中*号变量前缀的神秘原因

TIPS:本文共有 1638 个字,阅读大概需要 4 分钟。

Python3中很多变量会在前面加个*号+不知道原因敢说学过Python? 在Python3中,*号用于解包操作,将可迭代对象拆分为单独的元素。这种语法常用于函数参数传递和列表、元组等数据结构的处理。若学过Python,应该对这种特性有所了解。例如,在函数定义时使用*args表示可接受任意数量的位置参数。同时,*号还能应用于字典的解包等场景。因此,了解Python3中*号的作用对于熟练掌握Python语言非常重要。若不熟悉这一特性,可能需要重新审视自己对Python的学习程度。

有些人很疑惑为什么在Python3里有的变量前面有个*号呢?如下图!

Python不可以会无缘无故的出现这种写法,必然有他的用处!

原因分析

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

一个元组解包最经典的用法就是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}

小编关于《探究Python3中*号变量前缀的神秘原因》就分享到这儿了,如果内容对你有帮助,记得点赞加收藏哦!

网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(5)
  1. 半透ㄖ月 °2024-02-22 11:34半透ㄖ月 °[天津市网友]210.23.40.7
    感谢分享,之前一直对*号变量前缀感到困惑,现在终于理解了。
    顶1踩0
  2. 起轩2024-02-22 11:27起轩[广西网友]103.24.146.71
    Python3里的*号变量前缀,原来如此,终于搞懂了!
    顶0踩0
  3. 曾今笑有多殇2024-02-22 11:20曾今笑有多殇[福建省网友]203.28.185.23
    这篇文章解开了我对*号变量前缀的疑惑,感觉豁然开朗。
    顶5踩0
  4. 三月mg小雨【友满拒群】2024-02-22 11:12三月mg小雨【友满拒群】[广东省网友]103.63.176.125
    学习Python3的过程中,这个*号变量前缀简直是个谜。
    顶0踩0
  5. 只愿得一人心2024-02-22 11:05只愿得一人心[青海省网友]203.26.12.125
    真的是太神奇了,原来*号变量前缀有这么多用处啊!
    顶7踩0
推荐阅读
湘ICP备19021678号
Copyright © 2023 邵阳网 i0739.com