The*_*ONP 2 python tuples variable-assignment
我正在查看我发现的一个有趣的示例脚本(在这个站点,最后一个示例行124),我正在努力理解particles这行中的逗号是什么:
particles, = ax.plot([], [], 'bo', ms=6)
Run Code Online (Sandbox Code Playgroud)
如果省略逗号,脚本将出现错误,但语法(似乎类似于解包语句)对我来说没有多大意义,并且像
a, = [2,3]
Run Code Online (Sandbox Code Playgroud)
失败,这似乎是反对解包理论的论据.
任何见解将不胜感激.
需要解包1元组(或任何其他长度为1的序列).例:
>>> a,b = (1,2)
>>> print a
1
>>> print b
2
>>> c, = (3,)
>>> print c
3
>>> d = (4,)
>>> print d
(4,)
Run Code Online (Sandbox Code Playgroud)
注意c和d之间的区别.
注意:
a, = (1,2)
Run Code Online (Sandbox Code Playgroud)
失败是因为您需要与左侧包含的可迭代项相同的左侧项目数.Python 3.x有所缓解:
Python 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:09:56)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a,*rest = (1,2,3)
>>> a
1
>>> rest
[2, 3]
Run Code Online (Sandbox Code Playgroud)
看看plot调用返回什么。在您的情况下,它是一个包含一个元素的列表:
>>> import matplotlib.pyplot as plt
>>> ax = plt.gca()
>>> ax.plot([], [], 'bo', ms=6)
[<matplotlib.lines.Line2D object at 0x353d6d0>]
Run Code Online (Sandbox Code Playgroud)
现在,在这种情况下,在实际的 Line2D 对象上使用句柄会更有用,使用解包h, = ax.plot(...) 而不是像你会得到的那样在它周围使用虚假容器
h = ax.plot([], [], 'bo', ms=6)
后者将需要您稍后执行额外的步骤,例如
h[0].set_data(...)
Run Code Online (Sandbox Code Playgroud)
plot 的返回值始终是一个列表,因为有时它需要返回多个线对象。在列表中返回甚至单行更有意义,这样客户端代码就不必以不同的方式处理每种情况。
解包a, = [2,3]失败的原因是右侧有 2 个要解包的东西,而且只有一个变量。你需要用它a,b = [2,3]来解压。