2013-10-31 75 views
0

我讀了一本書,在他們寫的:Python的多變量聲明

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(); 

蟒蛇的這種方式一般語法混亂給我。謝謝你幫助我理解。

回答

4

這與創建對象無關 - 它是tuple(或更一般地說序列)在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 

並且您將這些變量分配給這些變量。

+0

一個方法會返回多個變量似乎很奇怪。我不記得在任何其他語言(C#,VB,Java,PHP)中看到這一點。這是一個Python的東西? – user1477388

+1

其他語言必須做更多的工作才能做同樣的事情(返回一個結構,或者一個類實例,或者一個HashMap ......) – RemcoGerlich

+0

這代替了某些(某些)其他語言所具有的那種python不' t(或不平凡):你不能改變傳遞給函數的變量的值。 –

1

它是元組拆包。

假設你有一些元組:

t = (1, 2, 3) 

那麼你可以用它來設置三個變量有:

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

你的函數sp.polyfit只返回一個元組。

實際上,它可以處理任何可迭代的,不只是元組,而是用元組來處理是最常用的方法。此外,迭代中元素的數量必須與變量的數量完全相同。

+0

任何想法定義了「print(res)」?我正在考慮代碼說'res',但他們的意思是說'剩餘'? – user1477388

+0

我想是這樣,即使不知道它是哪本書,我也很難分辨出來:-) – RemcoGerlich

+0

對不起,它是用Python構建機器學習系統。我只是想了解其中的代碼。不管怎麼說,還是要謝謝你。 – user1477388