2012-02-04 13 views
4

我在Python中很新,而且我對下面這行代碼感到非常驚訝。這是如何工作的:在Python中,print(sum(int(x)for raw_input()。split()))

print (sum(int(x) for x in raw_input().split())) 

我不明白在我的Java大腦裏面發生了什麼,特別是x從for循環傳遞給int()的方式。

+4

這幾乎是純英文...只是閱讀。 – JBernardo 2012-02-04 21:57:45

+2

你可以猜測嗎?你有沒有試圖做_anything_來幫助你理解它?也許把它分解成碎片並找出每個單獨做什麼? – 2012-02-04 22:00:01

+2

@Josh卡斯威爾我理解它是如何工作的,並知道如何使用它。我想知道的事情是方式的概念(有些理論)X傳遞給INT(),因爲它不存在,我知道,C++和Java語言。 – Heejin 2012-02-04 22:54:32

回答

7

raw_input().split()爲每一行輸入返回一個數組。 (int(x) for x in a)是一個generator expression,它將int應用於每行輸入,將其轉換爲整數。生成器表達式的結果是一個整數數組;每行輸入一個。

最後sum取數組中所有元素的總和,當然print會輸出整個批次。所以結果是產生所有輸入行總和的代碼,其中每行是一個數字。

+0

謝謝。我不知道「發電機表達式」的概念, – Heejin 2012-02-04 22:56:46

0

與此split()你打破了數字,所以現在你有一個列表。

你在這個列表迭代:for x in "list"

和你施放此X爲int:int(x)

所有這一切都在代碼

0

這是一個生成器表達式一行。作爲一個非常粗略的估計,你能讀它喜歡

a = [] 
for x in raw_input().split(): 
    a.append(int(x)) 
print sum(a) 

但它不是建立在中間列表a

1

首先,raw_input().split()讀取一行,然後將其分割爲其空白分隔的組件。因此,像1 3 2 5 7 3這樣的行成爲列表['1', '3', '2', '5', '7', '3']

此列表用於generator expressionint(x) for x in list_above。該表達式評估爲將列表元素轉換爲其表示的發生器。

該生成器在sum()的調用過程中進行評估,它將所有數字相加。

1

讓我們分解它。

print (sum(int(x) for x in raw_input().split())) 

也表示爲

sequence = raw_input().split() 
conv = [] 
for i in sequence: 
    conv.append(int(i)) 
print sum(conv) 

現在我們可以結合到這個使用

[int(x) for x in raw_input().split()] 

一行但這不是懶惰,所以使它懶惰,我們只需更換[(

(int(x) for x in raw_input().split()) 

現在,因爲這是一個可迭代的對象,我們現在可以將其傳遞給sum()

而這就是發生了什麼。

0

的最內部分,(int(x) for x in raw_input().split())是發電機表達式,其是這樣的:

(and_evaluate_this for into,these,variables in unpack_this) 

現在刪除詞語 「for」 和離開 「在」:

(and_evaluate_this  into,these,variables unpack_this) 

而且從向右讀離開。通過循環這些步驟生成一系列評估表達式。

相關問題