什么是最内在的括号?

时间:2014-02-09 19:07:36

标签: python python-2.7 pillow

在Pillow(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解析器的缺点是无法在此处找出意图吗?

4 个答案:

答案 0 :(得分: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 :(得分:1)

它被称为元组。有关元组和其他序列类型,请参阅此link

答案 2 :(得分:1)

thumbnail是一个以tuple为第一个参数的函数。执行thumbnail(128, 128)时,python会尝试将128视为元组(通过编制索引),但不是这样,因此您会收到错误。

在像box = 128, 128这样的变量赋值的情况下,python理解box是一个元组,但是在thumbnail(128, 128)的上下文中,python假设你打算传入两个int个参数,而不是tuple个。{/ p>

答案 3 :(得分: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可以修改,元组不能:

e.g。

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