2014-02-09 86 views
2

當使用枕頭(PIL)模塊中的thumbnail()方法,下面的慣例,必須遵守其中使用兩組(嵌套的)括號的:什麼是最內部的括號?

pil_image.thumbnail((128,128)) 

如果只使用一組,Python的生成以下錯誤:

TypeError: 'int' object is not subscriptable

是否最內層的括號有一個正式的名字嗎?

PS:以下也適用:

box = 128, 128 # No parentheses needed. 
pil_image.thumbnail(box) 

另外:是不是在Python的解析器的一部分,不足不能夠在這裏找出用意何在?

+1

沒有「缺陷」。在前一種情況下,您需要括號來說明您沒有傳遞兩個位置參數。後者不存在歧義。 – roippi

回答

1

括號嵌套的事實與任何事物無關。

這是重要的,(逗號)。這就是爲什麼box = 128, 128作品,其最終結果是box = (128, 128)

>>> box = 128, 128 
>>> box 
(128, 128) 
>>> box = (128, 128) 
>>> box 
(128, 128) 

例如相當於在python:

>>> myvar = ((128)) 
>>> myvar 
128 

>>> myvar = ((128),) # notice the COMMA 
>>> myvar 
(128,) 

(128)被稱爲tuple這就像一個LIST(mylist = []

其中一個主要區別是可以修改LIST,元組不能:

例如,

mylist.append(1) # works 
myvar.append(1) # fails 
+0

'myvar =((1 + 3),)'產生'TypeError:'int'對象不可調用 - FYI。 – Sabuncu

+0

我在終端運行這個,它工作得很好...大聲笑 –

+0

我也使用終端,在Windows 7上的Python 2.7.2 – Sabuncu

5

您正在將tuple傳遞給thumbnail()方法。區別如下:

thumbnail((128,128)) # single tuple argument: (128,128) 

thumbnail(128,128) # two integer arguments: 128 and 128 

box變量也是一個元組,這就是爲什麼它的工作原理,以及:

>>> box = 128, 128 
>>> box 
(128, 128) 
>>> 
>>> type(box) 
<type 'tuple'> 
1

其所謂的元組。關於元組和其他序列類型,請參見link

1

thumbnail是一個以tuple作爲第一個參數的函數。當你做thumbnail(128, 128)時,python會嘗試將128作爲一個元組(通過編制索引),但它不是,所以你會得到你的錯誤。

在變量賦值像box = 128, 128的情況下,蟒蛇瞭解到,box意味着是一個元組,但在thumbnail(128, 128)的情況下,蟒蛇假定你的意思是兩個int參數傳遞,而不是一個單一tuple

+0

+1您能否介紹一下Python如何嘗試索引128?謝謝。 – Sabuncu

+0

它只是做,因爲這是代碼告訴它做的事情。你可以做'x = 128; X [0]'。這將嘗試索引一個int。 – Alec

相關問題