私のコードをコンパクト化しようとしていて、Pythonにはとても新しいので、私が欲しいものを正確にカバーする前のトピックがある場合は謝ります。私はほとんど成功せずに検索と読書を試みました。どんな助けでも大変感謝します。ありがとう!Python 3.5 - ジェネレータで生成された名前付きタプルを作成する
(セル・コールは、私が提示ために必要なデータといくつかのランダムなスプレッドシートからあると仮定してください)
import xlrd
import collections
L_col = (21, 0, 27, 24, 3, 4, 11, 35, 18, 26)
L_label = ('Room_ID', 'Name', 'Type', 'Area', 'Sens_Cooling', 'Lat_Cooling', 'Heating', 'Ventilation', 'People', 'Volume')
sp = collections.namedtuple('Space', ['Room_ID', 'Name', 'Type', 'Area', 'Sens_Cooling', 'Lat_Cooling', 'Heating',
'Ventilation', 'People', 'Volume'])
a = (L_ws.cell_value(row, L_col[0]) for row in range(start, end))
b = (L_ws.cell_value(row, L_col[1]) for row in range(start, end))
c = (L_ws.cell_value(row, L_col[2]) for row in range(start, end))
d = (L_ws.cell_value(row, L_col[3]) for row in range(start, end))
e = (L_ws.cell_value(row, L_col[4]) for row in range(start, end))
f = (L_ws.cell_value(row, L_col[5]) for row in range(start, end))
g = (L_ws.cell_value(row, L_col[6]) for row in range(start, end))
h = (L_ws.cell_value(row, L_col[7]) for row in range(start, end))
i = (L_ws.cell_value(row, L_col[8]) for row in range(start, end))
j = (L_ws.cell_value(row, L_col[9]) for row in range(start, end))
rs = sp(a, b, c, d, e, f, g, h, i, j)
説明のために、ありがとう! – njohnson
私は、rsの各ジェネレータが指定された変数ではなく、「ボリューム」を与えている上記の同じ問題を抱えています。したがって、 'print(list(rs.Name))'と 'print(list(rs.Area))'はどちらもNameまたはAreaではなくVolumeを指定します。 – njohnson
@njohnson:私は、問題を解決するクロージャを使用するように私の例を変更しました。何が起こっていたかの詳細な説明については、https://eev.ee/blog/2011/04/24/gotcha-python-scoping-closures/を参照してください。 – niemmi