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