2017-05-14 64 views
0

我不是一個有經驗的Python程序員,我看到下面的代碼,我不明白。不幸的是,語法非常棘手,難以在互聯網上搜索。雖然我確實發現了一些解釋,「_」和「__」,但我不知道,如果下面的代碼有什麼特殊的含義爲「_」Python _意思是什麼時候分配循環

if not allowed_positions: 
    return (0, 0) 
_, point = max([(self.point(graph.find_point(p), self), p) for p in allowed_positions]) 

在上面的代碼,我不明白爲什麼有一個在點= ...之前用逗號「 - 」加下劃線。

+3

雖然我對你的標題感到困惑,因爲在這段代碼中沒有for循環。 –

+0

@AdamSmith有一個for循環 - >「for allowed_positions」,它創建一個數組,然後max函數從這個數組中找到最大值。但是讓我感到困惑的是「_」,在此之前。我是這樣的語法幾次與循環。 – DevBoy

+0

@DevBoy這就是所謂的列表理解。這是一個完全不同的語法結構。 '[iterable中的item的表達式]' –

回答

5

_僅用作廢棄變量的佔位符。 我們假設有一個函數返回一個帶有兩個元素的元組,並且我只對元組的第二部分感興趣,那麼通常使用_作爲我不需要的變量。 例如

>>> def return_tuple(): 
...  return (24,7) 
... 
>>> _, days = return_tuple() 
>>> days 
7 
+0

編輯後不久(編輯器中未顯示),我的編輯會殺死您的修改。如果您對帖子的當前狀態不滿意,請隨時恢復您的原始答案(我認爲這很好)。 – timgeb

+0

@timgeb完成。謝謝。 – DhruvPathak

+0

感謝@DhruvPathak,簡要而明確的解釋。 – DevBoy

1

_是,你不需要將數據存儲在變量的佔位符。

你可以用它來tuple unpacking,它是常見的做法是使用下劃線來表示該值將不稍後在腳本中使用。

如果你有這樣的事情:soldiers = [('Steve', 'Miller'), ('Stacy', 'Markov'), ('Sonya', 'Matthews'), ('Sally', 'Mako')]

和,你想要得到的只有你這樣做的姓氏:

for _, last_name in soldiers: 
    # print the second element 
    print(last_name) 

而不是做:

for first_name, last_name in soldiers: 
    print(last_name 

由於您不需要使用first_name。你用_代替它,所以你不存儲不必要的變量

+0

感謝@GarrettKadillak的解釋。它有幫助。 – DevBoy