C vs Python vs Ruby vs Haskell(ナンバリングdeベンチマーク) を勝手に添削。
今回は話題的に最適化するにはバイトIOにするとか出てきて面倒なので省略して、 Pythonic にするだけ。
元のコードは
import sys argvs = sys.argv del argvs[0] for i in range(len(argvs)): print(argvs[i]) fin = open(argvs[i], 'r') a = 0 for line in fin: a += 1 print(a, line, end = '') print("\n") fin.close()
これを Pythonic にしていきます。
- Linuxでは open() が utf-8 でファイルを開くので、とりあえず青空文庫のテキストファイルに合わせて 'cp932' を指定.
- 本体部分は関数の中に書く
- sys.argv を直接編集するのをやめる
- enumerate を使う
- with を使う
import sys def print_with_number(files): for filename in files: print(filename) with open(filename, 'r', encoding='cp932') as fin: for lineno, line in enumerate(fin, 1): print(lineno, line, end = '') print("\n") if __name__ == '__main__': print_with_number(sys.argv[1:])