2016-04-27 38 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

你有一个换行符,但没有新的缩进。它不会抛出错误,因为没有缩进问题,甚至在进行减法时也不会承认换行符。

如果您试图将所有文字都保存在窗口中,该怎么办?值之间的分隔符是逗号,而不是换行符。这就是为什么这是所需的行为。