我在Python中很新,而且我對下面這行代碼感到非常驚訝。這是如何工作的:在Python中,print(sum(int(x)for raw_input()。split()))
print (sum(int(x) for x in raw_input().split()))
我不明白在我的Java大腦裏面發生了什麼,特別是x從for循環傳遞給int()的方式。
我在Python中很新,而且我對下面這行代碼感到非常驚訝。這是如何工作的:在Python中,print(sum(int(x)for raw_input()。split()))
print (sum(int(x) for x in raw_input().split()))
我不明白在我的Java大腦裏面發生了什麼,特別是x從for循環傳遞給int()的方式。
raw_input().split()
爲每一行輸入返回一個數組。 (int(x) for x in a)
是一個generator expression,它將int
應用於每行輸入,將其轉換爲整數。生成器表達式的結果是一個整數數組;每行輸入一個。
最後sum
取數組中所有元素的總和,當然print
會輸出整個批次。所以結果是產生所有輸入行總和的代碼,其中每行是一個數字。
謝謝。我不知道「發電機表達式」的概念, – Heejin 2012-02-04 22:56:46
與此split()
你打破了數字,所以現在你有一個列表。
你在這個列表迭代:for x in "list"
和你施放此X爲int:int(x)
所有這一切都在代碼
這是一個生成器表達式一行。作爲一個非常粗略的估計,你能讀它喜歡
a = []
for x in raw_input().split():
a.append(int(x))
print sum(a)
但它不是建立在中間列表a
。
首先,raw_input().split()
讀取一行,然後將其分割爲其空白分隔的組件。因此,像1 3 2 5 7 3
這樣的行成爲列表['1', '3', '2', '5', '7', '3']
。
此列表用於generator expressionint(x) for x in list_above
。該表達式評估爲將列表元素轉換爲其表示的發生器。
該生成器在sum()
的調用過程中進行評估,它將所有數字相加。
讓我們分解它。
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()
而這就是發生了什麼。
的最內部分,(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)
而且從向右讀離開。通過循環這些步驟生成一系列評估表達式。
這幾乎是純英文...只是閱讀。 – JBernardo 2012-02-04 21:57:45
你可以猜測嗎?你有沒有試圖做_anything_來幫助你理解它?也許把它分解成碎片並找出每個單獨做什麼? – 2012-02-04 22:00:01
@Josh卡斯威爾我理解它是如何工作的,並知道如何使用它。我想知道的事情是方式的概念(有些理論)X傳遞給INT(),因爲它不存在,我知道,C++和Java語言。 – Heejin 2012-02-04 22:54:32