2

Pillow (PIL) モジュールでメソッドを使用する場合thumbnail()、2 組の (ネストされた) 括弧が使用される場合、次の規則に従う必要があります。

pil_image.thumbnail((128,128))

1 つのセットのみが使用されている場合、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

それはタプルと呼ばれます。タプルおよびその他のシーケンス タイプについては、このリンクを参照してください。

于 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,) は a と呼ばれtuple、LIST ( mylist = [])のようなものです。

主な違いの 1 つは、LIST は変更できるが、タプルは変更できないことです。

例えば

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

thumbnailtuple最初の引数としてa を取る関数です。を実行するとthumbnail(128, 128)、python は128(インデックスを作成することによって) タプルとして処理しようとしますが、そうではないため、エラーが発生します。

のような変数代入の場合、python はそれがタプルであることをbox = 128, 128理解していますが、 のコンテキストでは、python は単一の ではなく2 つの引数を渡すつもりであると想定します。boxthumbnail(128, 128)inttuple

于 2014-02-09T19:12:34.977 に答える