はじめに
PythonでCSVのIPアドレスリストを取り込み国名を付与する をアップしたところ しらかみゅ(shiracamus) さんがコメントで自分が作ったスクリプトを分かりやすく関数化してくれました。これをみて自分が分からなかったところをまとめました。
Python初学者の自分が知らなかったこと
main関数
main関数を定義して if __name__ == "__main__":
という形で条件分岐すると、スクリプトを関数を参照するためにインポートした際にmain関数が実行されないようになります。
def main:
#ここにメイン関数を定義
if __name__ == "__main__":
main()
イテレータ、ジェネレータ(yield)
CSVファイルの読み出しやデータの操作にジェネレータ(yield)を用いています。yield を使うと巨大な CSV ファイルのような大きなデータでも少しずつ読み込むことでメモリを節約できます。手持ちの本を読んでも詳しく載っていないので実際に使いながら覚えていかないといけないのかなと思います。
# CSVファイルの読み出し
def load_csv(filename, encoding="ascii"):
with open(filename, encoding=encoding) as input_file:
# return list(csv.reader(input_file))
yield from csv.reader(input_file)
# 読みだしたデータをもとに関数 country_name を実行する
def add_country_name(csv):
for date, ipaddress in csv:
yield [date, ipaddress, country_name(ipaddress)]
複数行コメントアウト
"""
Pythonで複数行コメントアウトするときは
ダブルクオーテーションまたはシングルクォーテーション3つつなげた
トリプルクオートで囲む。
"""
# 1行だけ、行の途中からコメントアウトするときはシャープを使用する。
- 参考サイト Pythonのコメント、コメントアウトの書き方
参考サイト
Pythonのif __name__ == "__main__" とは何ですか?への回答
python の yield。サクッと理解するには return と比較
Pythonのコメント、コメントアウトの書き方