Python中“*”运算符的正式名称是什么?

271
< p > 在 < code > function(*args) 中,操作符 < code > * 的正确名称是什么?展开,解压缩还是其他?< / p >

16
JavaScript有一个等效的“展开”操作符... - Wolfgang Kuehn
仅供参考,在C++中,它被称为解引用运算符(参考:https://www.cplusplus.com/doc/tutorial/pointers/)。此外,在Python中,所有变量传递给函数(参数)都是通过赋值传递的。(参考:https://docs.python.org/3/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference) - Cloud Cho
@CloudCho,C++中的那个代表完全不同的东西。 - Sнаđошƒаӽ
@Sнаđошƒаӽ,您能描述一下C++中的解引用运算符和Python中的拆包运算符之间的区别吗?我认为它们都与内存位置有关,而不是内存中的值。谢谢。 - Cloud Cho
@CloudCho 请查看官方文档 - Sнаđошƒаӽ
显示剩余2条评论
9个回答

238

在Ruby和Perl 6中,这被称为“splat”,如果你这样称呼它,来自这些社区的大多数人会明白你的意思。

Python教程使用“unpacking argument lists”这个词组,该词组既冗长又描述性强。

它也被称为可迭代对象解包,或者在**的情况下,被称为字典解包


112
使用 Python 已经大约 10 年,从未听说或看到过 "splat" 这个词。 - Joe Koberg
12
在 Python 中,它也用于“打包”参数列表,所以在那种情况下,它应该被称为“取消打包”吗? :) - John La Rooy
54
我建议使用“splatsplat”。 - Josh Lee
6
很遗憾,INTERCAL没有*作为运算符,因此我们缺乏官方来源... - wberry
6
在JavaScript(es2015)中,它被称为“展开运算符”(spread operator)。 - Kutyel
显示剩余3条评论

131

我称之为“位置扩展”,与我所谓的“关键词扩展”**相对应。


55

1
这是最准确的答案,很遗憾它没有被接受! - Nir Alfasi
8
表达式“运算符”是有歧义的,因为根据上下文,可以执行参数扩展或乘法运算,这两个操作是不同的。 - HelloGoodbye
2
@HelloGoodbye,从上下文中很容易理解它是哪一个。 - Nir Alfasi
4
似乎楼主在问如何发音(这可能是一个单词,也可能不是 - 这又是另一个问题),*。通过说它是“*运算符”,只是把问题作为答案扔回去了。楼主可能想知道当他遇到它时如何大声说出来(或在他的脑海中)。这对我来说都是新的,我会用“splat!” - elPastor
如果我们选择简单一点,就称之为星号操作符。但是**也可以叫做dasterisk。嗯... - TaW

17

我说“星号参数”,Python人似乎知道我在说什么。

**更棘手-我认为只需称其为"qargs",因为它通常用作**kw**kwargs


2
我也只是说 kwargs,虽然这可能并不真正涉及到操作符本身。 - TM.

17

2
但是你不能像使用SPLAT那样大喊gather或scatter :D - Samantha Branham
@SamanthaBranham 我喜欢 gather 和 scatter 可以很容易地被清晰地可视化。当然,splat 也很好地可视化了。 - Anton Strogonoff

10
我认为它最常被称为“星号运算符”。解包参数是它的作用。 (参考链接)

3

有一个口语化的称呼叫做"splatting"。

当你使用参数(列表类型)时,你需要使用单个*,而当你使用关键字参数(字典类型)时,你需要使用双重**

在某些情况下,***都被称为"splatting"。

参考链接: https://dev59.com/G1YN5IYBdhLWcg3wK1bO#47875892


3

这个技术术语是可变参数函数。因此,在某种程度上,这是正确的术语,而不考虑编程语言。

话虽如此,在不同的语言中,该术语确实有合法的名称。正如其他人所提到的,在rubyjulia和其他几种语言中,它被称为"splat",并在官方文档中以该名称进行了注明。在javascript中,它被称为"spread" 语法。正如其他答案中提到的那样,在许多其他语言中,它有许多其他名称。无论你如何称呼它,它都非常有用!


-1
我将 *args 称为 "星号参数" 或 "可变参数",将 **kwargs 称为 "关键字参数"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接