2012-04-05 80 views
0

一個簡短的問題:是否可以將生成器表達式中的計算結果分配給引用者?將計算值賦給生成器表達式中的變量?

假設我有一個這樣的表達:

m = (float(i.dist) - float(base) for i in met_obj if str(i.code) != '90')

i.dist是我想機會對象的屬性。我想:

m = (float(i.dist) -= float(base) for i in met_obj if str(i.code) != '90')

或者我需要使用發電機來代替?

謝謝! LarsVegas

+2

問題不是很清楚......你能舉一些例子輸入和輸出嗎? – jamylak 2012-04-05 11:53:53

+1

你想要生成的值是什麼?你想讓它們等於'新'i.dist'值嗎?或者是什麼? – 2012-04-05 11:53:55

+0

我正在通過基本上全部保存相同信息的不同文件(例如距交點的距離)循環。但是有些人在現實世界xy中還有其他人。數據存儲在一個類中,i.dist例如是第i行的一個屬性。因此,如果符合某些條件,想要更改「i」這個對象的屬性,就像這個「i.dist = i.dist - base」一樣。澄清:現在'met_obj [0] .dist ='126165.26''應該變成'met_obj [0] .dist = -32.5'。希望這有助於理解......乾杯 – LarsVegas 2012-04-05 12:06:52

回答

0

一個簡短的回答:不,這是不可能的。

+0

我問了一個簡短的答案。謝謝。 – LarsVegas 2012-04-05 14:09:21

0

我認爲你的代碼有錯誤。

正如你所看到的,float()是一個函數,並聲明float(i.dist) -= float(base)方式分配給函數調用,所以這將是一個語法錯誤:)

+0

我認爲他知道有一個錯誤,因爲他嘗試了這一點,但它沒有工作,所以他在這裏問。他正在尋找解決問題的方法,即他的代碼的正確版本。 – jamylak 2012-04-05 12:07:26

+0

@jamylak:的確如此。 – LarsVegas 2012-04-05 12:13:19

+0

@wyk其實'float'是一個類(或類型),而不是函數,初始化'float()'創建一個新的'float'實例,在這種情況下,它不允許他編輯目標對象。 – Tcll 2017-11-21 19:32:55

1

如果你想破壞性的循環更新的對象,然後使用一個循環,而不是一臺發電機的表達:在functional風格編程的時候,一邊做任務到現有的變量

for i in met_obj if str(i.code) != '90': 
    i.dist -= float(base) 

生成器表達式是有用的/成員通常是一個勢在必行的結構。

+0

感謝您指出這一點。正如我剛纔所說:我想知道是否:-)但老實說,這不是最好的方法。 – LarsVegas 2012-04-05 14:13:06