2016-04-27 41 views
3

此代碼:爲什麼這個有效的Python?

bounding_box = (
    -122.43687629699707, 37.743774801147126 
    -122.3822021484375, 37.8
) 

產生以下值:

(-122.43687629699707, -84.63842734729037, 37.8) 

有三個值,因爲我忘記在第一行的拖尾逗號。令人驚訝的是,Python接受這一點,並將第二個和第三個數字加在一起!

這是類似string literal concatenation但數字?爲什麼這會是所期望的行爲?

回答

9

發生什麼很簡單。在下面的分配

bounding_box = (
    -122.43687629699707, 37.743774801147126 
    -122.3822021484375, 37.8
) 

是相當於

bounding_box = (-122.43687629699707, **37.743774801147126-122.3822021484375**, 37.8) 

所以,這兩個值只是被減去,從而產生一個3元組。

3

沒有換行,並丟棄小數爲清楚:

bounding_box = (-122, 37 - 122, 37) 

換句話說,什麼應該是一個逗號,然後一元減號被解析爲減法運算符。

+0

是的!這是運行棉絨的好理由。例如,PyCharm顯示了關於第三個數字的抱怨:「PEP8:運營商周圍缺少空白」。雖然它沒有得到根本原因(一個逗號缺失),但至少有一點是有什麼不對勁的。 – danvk

0

你有一個換行符,但沒有新的縮進。它不會拋出錯誤,因爲沒有縮進問題,甚至在進行減法時也不會承認換行符。

如果您試圖將所有文字都保存在窗口中,該怎麼辦?值之間的分隔符是逗號,而不是換行符。這就是爲什麼這是所需的行爲。