2014-02-09 3 views
2

При использовании метода thumbnail() в модуле подушки (PIL), следующие конвенции должны соблюдаться, где используются два набора (вложенной) круглых скобках:Что называются внутренними скобками?

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 что-то вроде СПИСОК (mylist = [])

Одним из основных отличий является СПИСОК может быть изменен, кортеж не может:

например.

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

'myvar = ((1 + 3),)' приводит к 'TypeError: 'int' объект не вызываем' - FYI. – Sabuncu

+0

Я запускал это в Терминале, и он работал просто отлично ... lol –

+0

Я также использую терминал в Python 2.7.2 на Windows 7. – 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; х [0] '. Это попытается проиндексировать int. – Alec

Смежные вопросы