2016年6月22日

Pythonでハマった件

変数のスコープでハマった

例えばこんな感じのコードで
row = #データベースから一行取得したもの---1
entrants = #データベースから複数行取得したもの
entrantnames = [row.name for row in entrants]
#とすると1のrowが上書きされてしまう

rowがリスト内包表記内のみで有効な変数だと思ったら、リスト内包表記のその側の変数を上書すると考えもしずハマってしまった
Lispのようにブロック毎に変数のテーブルが生成されるのかと勝手に勘違いしてしまった
まあ後から冷静に考えたら1のrowはもっと後で利用するんで、1の文自体をもっと後に、今回は上書きされてしまったリスト内包表記の後に記述するべきで、そうすれば変な上書き問題も発生しなかったのかなと思います
やっぱり変数は利用する直前で記述するべきですね