ジェネレーター式の紹介

Python Toolbox

Hugo Bowne-Anderson

Data Scientist at DataCamp

ジェネレーター式

  • リスト内包表記を思い出す
[2 * num for num in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • ( )ではなく[ ]を使用
(2 * num for num in range(10))
<generator object <genexpr> at 0x1046bf888>
Python Toolbox

リスト内包表記 vs. ジェネレーター

  • リスト内包表記 - リストを返す
  • ジェネレーター - ジェネレーターオブジェクトを返す
  • どちらもイテレートできる
Python Toolbox

ジェネレーターから値を出力する (1)

result = (num for num in range(6))

for num in result: print(num)
0
1
2
3
4
5
result = (num for num in range(6))

print(list(result))
[0, 1, 2, 3, 4, 5]
Python Toolbox

ジェネレーターから値を出力する(2)

result = (num for num in range(6))
  • 遅延評価
print(next(result))
0
print(next(result))
1
print(next(result))
2
print(next(result))
3
print(next(result))
4
Python Toolbox

ジェネレーター vs. リスト内包表記

Python Toolbox

ジェネレーター vs. リスト内包表記

Python Toolbox

ジェネレーター vs. リスト内包表記

Python Toolbox

ジェネレーター式における条件分岐

even_nums = (num for num in range(10) if num % 2 == 0)

print(list(even_nums))
[0, 2, 4, 6, 8]
Python Toolbox

イテレータ式

  • 呼び出すとジェネレーターオブジェクトを生成する
  • 通常の関数のように定義 - def
  • 単一の値を返す代わりに、値のシーケンスを返す
  • yield キーワード{{4}} を含む値を生成
Python Toolbox

ジェネレーター関数の作成

  • sequence.py
def num_sequence(n):
    """Generate values from 0 to n."""
    i = 0
    while i < n:
        yield i
        i += 1
Python Toolbox

ジェネレーター関数を使用する

result = num_sequence(5)

print(type(result))
<class 'generator'>
for item in result:
    print(item)
0
1
2
3
4
Python Toolbox

練習しましょう!

Python Toolbox

Preparing Video For Download...