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

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

作者: PathonDiss | 来源:发表于2019-08-26 18:46 被阅读0次

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

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

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

原因分析

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

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

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

a, b = b, a

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

回到题图命令里

product(A, B)

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

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

例如如下代码:

 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)

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

这种形式。这里是利用了元组解包的另一个性质——元组解包可以包含一个*args关键字,将“多余”的部分塞给这个可变长的变量中,例如:( 需要注意的是,我这里是为了方便理解然而这种写法有时候不被支持,因为python的函数,必须要求所有非关键字参数出现在关键字参数之前,而这个例子里有些参数可能是关键字形式的)

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基地,里面有很多学习资料,感兴趣的+Q群:895817687

相关文章

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

    有些人很疑惑为什么在Python3里有的变量前面有个*号呢?如下图! Python不可以会无缘无故的出现这种写法,...

  • Python3中很多变量会在前面加个*号,不知道原因敢说学过Py

    有些人很疑惑为什么在Python3里有的变量前面有个*号呢?如下图! Python不可以会无缘无故的出现这种写法,...

  • 3. python3语法

    python3变量 1 声明变量语法:标识符/变量名=变量值 2 变量的命名规范(1). 在 Python 里...

  • Python3 基本数据类型

    Python3 基本数据类型 Python中的变量不需要声明。 每个变量在使用前都必须赋值,变量赋值以后该变量才会...

  • 04、python基本数据类型

    Python3 基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会...

  • 第二章 数据类型

    Python3 基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会...

  • 小故事

    告诉你一个小故事 里面有我的小秘密 我会在今天七点前告诉你 或许是在清晨的露水滴 或许是在傍晚的霞光里 告诉你一个...

  • python入门笔记02

    Python3 基本数据类型 python中的变量不需要声明。每个变量在使用前都必须赋值,变量被赋值以后才会被创建...

  • 我站在镜前 看镜里的自己 自己在镜里 看镜外的你 或许是因为你 我忘记了自己 或许是因为自己 而无法忘记你

  • 喜欢你  没道理  爱上你  累的是自己

    曾经有一个人,或许你不知道,但是没关系。她从那年的那天遇见了你,她在你的前三排,担当小组长。本来她是个疯疯...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ywwdectx.html