web-dev-qa-db-ja.com

変数名の後に末尾のコンマを追加すると、変数名がタプルになるのはなぜですか?

変数名(この場合は文字列)の後に末尾のコンマを追加すると、それがTupleになる理由を知りたいです。つまり.

>>> abc = 'mystring',
>>> print(abc)
('mystring',)

abcを出力すると、Tuple('mystring',)が返されます。

31
Avadhesh

重要なのは、括弧ではなくコンマです。 Pythonチュートリアルによると:

タプルは、コンマで区切られたいくつかの値で構成されます

括弧は、コンマが使用されている他の場所での明確化に使用されます。たとえば、引数リストの一部としてタプルをネストまたは入力できるようにします。

タプルとシーケンスに関するPythonチュートリアルセクション を参照してください。

35
Ben James

これが、1つの要素を持つタプルリテラルを記述する唯一の方法だからです。リストリテラルの場合、必要な括弧によって構文が一意になりますが、括弧はグループ化を示すこともできるため、式を括弧で囲むことはタプルになりません。別の構文要素(この場合はコンマ)が必要です。

7
Philipp

更新

はるかに良い答え については上記を参照してください。

元の回答

python)では、タプルは括弧で示されます

タプルは括弧で示されていません。任意の式を括弧で囲むことができます。これはタプルにとって特別なことではありません。かっこはあいまいになるため、ほとんどの場合、かっこを使用する必要があります。そのため、__str__および__repr__タプルのメソッドはそれらを表示します。

私は正直に立っています(今日私がしていることはすべて。ため息をつきます)。

例えば:

abc = ('my', 'string')

単一要素のタプルはどうですか?括弧表記は引き続き有効です。

abc = ('mystring',)

すべてのタプルについて、括弧は省略できますが、コンマはそのままにしておく必要があります。

abc = 'mystring', # ('mystring',)

または

abc = 'my', 'string', # ('my', 'string',)

つまり、実際にはyouが行っていたのは、文字列ではなく単一要素のタプルを作成することでした。

ドキュメント は明確に言っています:

少なくとも1つのコンマを含む式リストは、タプルを生成します。タプルの長さは、リスト内の式の数です。式は左から右に評価されます。

5
Manoj Govindan

単一の値の後にコンマが表示されている場合、その値はデータ型「タプル」として解釈されます。

これが私が経験を通して学んだ、あなた方の何人かに当てはまるかもしれない小さなことです:

ミュージシャンの場合、タプルとトリプルという単語は、厳密には互換性がない特定の種類の拍子記号内で使用される音符のグループを表すために使用されるため、タプルという単語は混乱する可能性があります。たとえば、拍子記号が6/8(トリプレットフィール)の場合、拍子記号が4/4(ストレートフィール)であるかのように演奏される2つの8分音符のグループ。またはその逆に、トリプレットが4/4時間で再生されました。これにより、初心者プログラマーはおそらくタプルを値のペアとして解釈することになります。

これは、プログラミングで見られるのと同じ種類のタプルではありません。これらのタプルは不変の(割り当てられると変更できない)シーケンスデータ型であり、任意の数の値を保持できますが、すべて括弧で囲まれている、つまり括弧のタプルであるかのように一緒に転送されると見なすことができます。

タプルは一度割り当てられると追加または削除できないため、通常は変数のパックとアンパックに使用されます。関数から複数の値を返すために頻繁に使用します。

def somefunction_foo(some_data_file):
    map1 = dict()
    map2 = dict()
    map3 = dict()

    with open(datafile, 'r') as file: # auto-close the file after this block
        for row in file:
            pass
            # don't actually pass, but 
            # fill each map with specific data from the same file

    return map1, map2, map3  # I'm returning a Tuple, but without parenthesis
1
PaulG

マルチエレメントタプルの解凍:

a, b = (12, 14)

print type(a)

出力:

int

単一要素タプルの解凍:

a, = (12, )

print type(a)

出力:

int

さもないと:

a = (12,)

print type(a)

出力:

タプル

1
Mukti

質問の例では、変数「abc」を長さ1のタプルに割り当てました。

このような構文を使用して、複数の割り当てを行うことができます。

x,y = 20,50

また、printステートメントには、printステートメントをコンマで終了するための特別な理解があることに注意してください。これは、末尾の改行を省略するようにprintに指示します。

print 'hello',
print 'world'

結果:

hello world
0
Zv_oDD