2

在 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

4 回答 4

5

您正在将一个元组传递给该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'>
于 2014-02-09T19:09:46.880 回答
1

thumbnail是一个以 atuple作为其第一个参数的函数。当您这样做时thumbnail(128, 128),python 会尝试将128其视为元组(通过对其进行索引),但事实并非如此,因此您会得到错误。

在变量赋值的情况下box = 128, 128,python 理解这box意味着是一个元组,但在 的上下文中thumbnail(128, 128),python 假设您打算传入两个int参数,而不是单个tuple.

于 2014-02-09T19:12:34.977 回答
1

它称为元组。请参阅有关元组和其他序列类型的此链接。

于 2014-02-09T19:10:19.437 回答
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,) 称为 atuple类似于 LIST ( mylist = [])

主要区别之一是 LIST 可以修改,元组不能:

例如

mylist.append(1)  # works
myvar.append(1)  # fails
于 2014-02-09T19:16:32.857 回答