86623


`list(for x in range(10))`や，`''.join(for elem in
elements)`などでは，`list`,`join`の引数は何として扱われているのでしょうか．  
`list([for x in range(10)])`と同義ですか，それとも`list((for x in range(10)))`でしょうか．


CC BY-SA 4.0
2022-03-01T00:04:20.733
86622
2022-03-01T04:30:05.877
51374
question
python python3
カッコのないジェネレーター表記？


> `list(for x in range(10))`や，`''.join(for elem in
> elements)`などでは，list,joinの引数は何として扱われているのでしょうか．

仮に`list(x for x in range(10))`や`''.join(elem for elem in elements)`とした場合、  
これらlistやjoinの内部に記述されたものはご推察の通り、カッコのないジェネレーター表記です。

> `list([for x in range(10)])`と同義ですか，それとも`list((for x in range(10)))`でしょうか．

`list(x for x in range(10))`と同義なのは **後者** です。  
以下にコードを示します。

## コード

[code]

    a = list(x for x in range(10))
    b = [x for x in range(10)]
    c = list([x for x in range(10)])
    d = (x for x in range(10))
    e = list(d)
    f = list((x for x in range(10)))
    
    # generatorをlistでキャスト
    print('aの型：{}, 値：{}'.format(type(a), a))
    
    # リスト内包表記
    print('bの型：{}, 値：{}'.format(type(b), b))
    
    # リスト内包表記をリストでキャスト
    print('cの型：{}, 値：{}'.format(type(c), c))
    
    # generator
    print('dの型：{}, 値：{}'.format(type(d), d))
    
    # generatorをlistでキャスト(aと同じ)
    print('eの型：{}, 値：{}'.format(type(e), e))
    
    # generatorをlistでキャスト(aと同じ)
    print('fの型：{}, 値：{}'.format(type(f), f))
    
    # generatorを直接確認
    print(type(x for x in range(10)))
    print(x for x in range(10))
    
    print(''.join(str(elem) for elem in a))
    
[/code]

## 実行結果

[code]

    aの型：<class 'list'>, 値：[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    bの型：<class 'list'>, 値：[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    cの型：<class 'list'>, 値：[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    dの型：<class 'generator'>, 値：<generator object <genexpr> at 0x103667b30>
    eの型：<class 'list'>, 値：[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    fの型：<class 'list'>, 値：[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    <class 'generator'>
    <generator object <genexpr> at 0x103667a50>
    0123456789
    
[/code]

また、一般的にジェネレーターの方が単なるリストよりも、メモリサイズや処理が高速となる場合が多いです。ご参考までに。  
[Pythonでジェネレータを使用してメモリ効率の高いプログラムを作成する。](https://ichi.pro/python-de-jyenere-ta-
o-shiyoshite-memori-koritsu-no-takai-puroguramu-o-sakuseisuru-80836849663398)


CC BY-SA 4.0
2022-03-01T00:30:09.603
86623
2022-03-01T00:49:31.553
2022-03-01T00:49:31.553
51317
51317
86622
answer


公式ドキュメントだと

<https://docs.python.org/ja/3/reference/expressions.html#generator-
expressions>

> 関数の唯一の引数として渡す場合には、丸括弧を省略できます。

のところですね。


CC BY-SA 4.0
2022-03-01T04:30:05.877
86628
2022-03-01T04:30:05.877
12274
86622
answer