2

我想知道逗号在这段代码中的作用:

line, =

以下示例显示了该行为:

import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
print("First:")
print(line)
print("Second:")
line = ax.plot([], [], lw=2)
print(line)

结果:

First:
Line2D(_line0)
Second:
[<matplotlib.lines.Line2D object at 0xb137c4c>]

当我尝试使用 line 变量时,它真的变得令人困惑,而且我不知道是否使用尾随逗号:

def init():
    line.set_data([], [])
    return line,

或者有没有更好的方法来避免逗号?

4

4 回答 4

6

它只是打开一个 1 元组。例如:

line, = ('foo',)   # same as line = 'foo' in this example

与之比较

line1, line2 = ('foo', 'bar') # unpack a 2-tuple

等等

于 2013-04-19T09:57:29.320 回答
4

它有助于解包元组

在此处查看不同的结果:

a = (1,)
print(a) # prints (1,)

a,  = (1,)
print(a) # prints 1
于 2013-04-19T09:59:26.493 回答
1

在 Python 中,有一个快捷方式可以一次分配多个变量:

(a, b, c) = something

您分配给变量元组而不是单个变量。something如果不是恰好包含 3 个元素的集合,此示例将引发异常;否则它将绑定a到 中的第一项somethingb第二项和c第三项。

您可能知道,在 Python 元组中,括号通常是可选的;重要的是逗号。所以你也可以把我的例子写成:

a, b, c = something

这当然适用于任何大小的变量元组,而不仅仅是三个。并且 1 元组由一个带有尾逗号的项目表示,并且 1 后面没有任何内容。所以你的例子:

line, = ax.plot([], [], lw=2)

只是断言ax.plot([], [], lw=2)返回具有单个元素的集合,并绑定line到该元素。它与几乎相同的陈述不同:

line = ax.plot([], [], lw=2)

因为这将绑定line到集合本身,并且不包含关于它拥有的元素数量的断言。


1这有点难看,但很有必要,因为唯一其他明显的语法是(item),这会与简单地为子表达式加上括号的语法发生冲突。例如,没有人愿意2 * (3 + 1)给出关于将 anint和 a相乘的错误tuple

于 2013-04-19T10:03:56.400 回答
0

它使变量成为元组中的第一个(并且仅在这种情况下)项。这允许“多重”分配,例如:

a, b = 1, 2

这对于交换值特别有用,因此,从上面继续,您可以执行以下操作:

a, b = b, a

anda变量b将交换值。

于 2013-04-19T09:59:38.823 回答