Pythonでスクリプトを書いていて、インデントの扱いにおけるふるまいの違いを見つけたので記載。
参考資料は以下の書籍。
Amazon.co.jp: PythonでExcel、メール、Webを自動化する本 eBook : 中嶋 英勝: Kindleストア
Amazon.co.jp: PythonでExcel、メール、Webを自動化する本 eBook : 中嶋 英勝: Kindleストア
ふるまい
ループ処理のスクリプトを作成
以下のスクリプトでリストを作成する。
no_indent.py
実行結果は以下となる。
[‘Mr.tanaka’, ‘Mr.suzuki’, ‘Mr.yamada’]
同じスクリプトでprint行をインデントする
以下のスクリプトで新しいリストを追加する。
indent.py
実行結果は以下となる。
[‘Mr.tanaka’]
[‘Mr.tanaka’, ‘Mr.suzuki’]
[‘Mr.tanaka’, ‘Mr.suzuki’, ‘Mr.yamada’]
結果が異なる理由
Pythonの仕様
Pythonではインデントをfor文やif文のコードをグループ化するために使っているため。
以下に詳細を記載。
no_indent.pyの場合
user~(user)のインデントしている行を一つのグループ(ブロック)と見なしてfor文を実行する。
forでループした結果をprintするため、最終的な結果が出力される。
indent.pyの場合
user~(customers)のインデントしている行を一つのグループ(ブロック)と見なしてprint文も含めてfor文でループを実行する。ループが終わる毎にprint文が実行されるためappendされた結果が毎回出力される。
まとめ
Pythonではインデントが違うだけで結果が全く異なる。
初歩的な内容だけど忘れがちなので注意すること。
コメント