week03_pythonジェネレータ
ジェネレータ式Generator expression
構文:
(戻り値for要素in反復可能オブジェクトif条件)
リスト解析式の中かっこを小かっこに変えればいい
ジェネレータを返します
リスト解析式との違い:
ジェネレータ式は、必要に応じて計算(または不活性評価、遅延計算)され、必要に応じて計算されます.
リストの解析式は、すぐに値を返します.
ビルダー:
反復可能オブジェクト
反復器
例:
練習問題:
リスト解析式との比較:
計算方法:
ジェネレータ式の遅延計算、リスト解析式の即時計算;
メモリ使用量:
戻り値自体から言えば、ジェネレータ式はメモリを節約し、リスト解析式は新しいリストを返す.
ジェネレータにはデータがなく、メモリの消費量は極めて少ないが、使用するときは、データを1つずつ返すが、合わせて消費するメモリも少なくない.
リスト解析式で新しいリストを構築するにはメモリが必要です.
計算速度:
計算時間だけを見ると、ジェネレータ式の消費時間は非常に短く、リスト解析式の消費時間は長い.
しかし、ジェネレータ自体は値を返さず、ジェネレータオブジェクトを返しただけです.
リストは解析的に構築され、新しいリストが返されます.
集合解析:
構文:
{戻り値for要素in反復可能オブジェクトif条件}
リスト解析式の中かっこをかっこ{}に変えればいい
すぐにコレクションに戻る
使用方法:
辞書解析:
構文:
{戻り値for要素in反復可能オブジェクトif条件}
リスト解析式の中かっこをかっこ{}に変えればいい
key:value形式の使用
すぐに辞書を返す
使用方法:
構文:
(戻り値for要素in反復可能オブジェクトif条件)
リスト解析式の中かっこを小かっこに変えればいい
ジェネレータを返します
リスト解析式との違い:
ジェネレータ式は、必要に応じて計算(または不活性評価、遅延計算)され、必要に応じて計算されます.
リストの解析式は、すぐに値を返します.
ビルダー:
反復可能オブジェクト
反復器
例:
g = ("{:04}".format(i) for i in range(1, 11))
print(type(g))#
print(next(g))
for x in g:
print(x)
print("#"*50)
for x in g:
print(x)
: ; , ; , ;
練習問題:
it = ("{}".format(i+1) for i in range(2))
first = next(it)
second = next(it)
print(first)
print(second)
val = int(first) + int(second) # int() ?
print(val)
リスト解析式との比較:
計算方法:
ジェネレータ式の遅延計算、リスト解析式の即時計算;
メモリ使用量:
戻り値自体から言えば、ジェネレータ式はメモリを節約し、リスト解析式は新しいリストを返す.
ジェネレータにはデータがなく、メモリの消費量は極めて少ないが、使用するときは、データを1つずつ返すが、合わせて消費するメモリも少なくない.
リスト解析式で新しいリストを構築するにはメモリが必要です.
計算速度:
計算時間だけを見ると、ジェネレータ式の消費時間は非常に短く、リスト解析式の消費時間は長い.
しかし、ジェネレータ自体は値を返さず、ジェネレータオブジェクトを返しただけです.
リストは解析的に構築され、新しいリストが返されます.
集合解析:
構文:
{戻り値for要素in反復可能オブジェクトif条件}
リスト解析式の中かっこをかっこ{}に変えればいい
すぐにコレクションに戻る
使用方法:
{(x, x + 1) for x in range(10)}
辞書解析:
構文:
{戻り値for要素in反復可能オブジェクトif条件}
リスト解析式の中かっこをかっこ{}に変えればいい
key:value形式の使用
すぐに辞書を返す
使用方法:
print({x: (x, x+1) for x in range(10)})
print({x: [x, x+1] for x in range(10)})
print({(x): [x, x+1] for x in range(10)})
# print({[x]: [x, x+1] for x in range(10)})#####???????????
print({chr(0x41+x): x**2 for x in range(10)})
print({str(x): y for x in range(3) for y in range(4)})
print({str(x): y for x in range(3) for y in range(4)})
# ???