タプルの内包表記とジェネレータ式の違いについてメモを残しておきます
まずは内包表記の復習から///
inner.py
list=[]
for x in range(10):
list.append(x)
print(list)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#これを内包表記に書き換えると
list2=[x for x in range(10)]
print(list2)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
では本題のタプルの内包表記とジェネレータ式について
tuple.py
#普通のイテレータ
def g():
for i in range(4):
yield i
g=g()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
"""
0
1
2
3
"""
g=(i for i in range(4))#タプルのように思えるがジェネレーターである
print(type(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
"""
<class 'generator'>
0
1
2
3
"""
iterator.py
g=tuple(i for i in range(4))#タプルの場合は括弧の前にtupleと記述する必要あり
print(type(g))
print(g)
#<class 'tuple'>
#(0, 1, 2, 3)
#まとめ
ジェネレータ式では()内に記述すればいいのに対し、
タプルの内包表記では()の前にtupleと記述する必要があります。