0

我正在读一本书,他们在书中写道:

fp1, residuals, rank, sv, rcond = sp.polyfit(x, y, 1, full=True)

似乎sp.polyfit方法以某种顺序为这些变量中的每一个赋值。

例如:

>>> print("Model parameters: %s" % fp1)
Model parameters: [ 2.59619213 989.02487106]
>>> print(res)
[ 3.17389767e+08]

(我不知道在哪里res定义...但是...)这是 Python 创建对象的方式吗?

在其他语言中,您可能会执行以下操作:

Foo myFooObject = bar.GenerateFoo();
myFooObject.foo();
myFooObject.bar();

这种方式的python的一般语法让我感到困惑。谢谢你帮助我理解。

4

2 回答 2

4

这与对象创建无关——它是python 中元(或更一般的序列)解包的一个示例。

元组是一个固定的项目序列,您可以通过类似的命令将一个集合分配给另一个集合

a, b, c = 1, 'two', 3.0

这与

a = 1
b = 'two'
c = 3.0

(请注意,您可以使用此语法交换项目:a, b = b,a。)

所以在你的例子中发生的是scipy.poylfit有一行像

return fp, resides, rank, eval, rcondnum

并且您正在将变量分配给这些。

于 2013-10-31T12:17:34.917 回答
1

这是元组拆包。

假设你有一些元组:

t = (1, 2, 3)

那么您可以使用它来设置三个变量:

x, y, z = t  # x becomes 1, y 2, y 3

您的函数 sp.polyfit 只返回一个元组。

实际上它适用于任何可迭代的,不仅仅是元组,但使用元组是迄今为止最常见的方式。此外,可迭代对象中的元素数量必须完全等于变量的数量。

于 2013-10-31T12:33:04.953 回答