仕事上、早々にを使えるようにしないといけないため、
を基に学んでいく。
前回
2. Python組み込みのデータ構造と関数、ファイルの扱い
2.2 関数
2.2.6 ジェネレータ
にはシーケンスを逐次処理するための一貫した方法がある。これはイテレータプロトコルを用いて実現される。
# イテレータの確認 some_dict = {'a':1, 'b':2, 'c':3} for key in some_dict: print(key) # for key in some_dict:は辞書some_dictからイテレータを作る dict_iterator = iter(some_dict) print(dict_iterator) print(list(dict_iterator))
ジェネレータは、新しいイテレータを生成する方法の1つである。
# ジェネレータでイテレータを生成する def squares(n = 10): print('Generating squares from 1 to {0}'.format(n ** 2)) for i in range(1, n+1): yield i ** 2 gen = squares() gen print(list(gen)) # ジェネレータ式でイテレータを生成する gen = (x ** 2 for x in range(100)) print(list(gen)) def make_gen(): for x in range(100): yield x ** 2 gen = make_gen() print(list(gen)) print(sum(x ** 2 for i in range(100))) print(dict((i,i ** 2) for i in range(5)))
2.2.7 itertoolsモジュール
標準ライブラリのモジュールには一般的なデータアルゴリズム用のジェネレータが揃っている。たとえばはシーケンスや関数を引数として受け取り、シーケンス内の連続した要素を指定した関数で集約する。
関数 |
説明 |
---|---|
可能な個の要素を持つタプルをの中から生成する。この際、並び順が異なっているが組み合わせが同じものは同一と見なして復元抽出はしない | |
可能な個の要素を持つタプルをの中から生成する。この際、要素の並び順も考慮する | |
(キー,キーごとのグループを参照するイテレータ)形式のタプルを各キーごとに生成する | |
入力した変数の直積をタプルとして生成する |
2.2.8 エラーと例外の処理
堅牢なプログラムを書くのにエラーと例外の処理を上手く行うのは重要である。ではさまざまなエラーが存在し、これを上手く処理する必要がある。
# try-exceptで例外処理する # try: # (この処理を行う) # except: # (例外が発生するとこの処理を行う) def attempt_float(x): try: return float(x) except: x # 特定のエラー型に特定することもできる def attepmt_float2(x): try: return float(x) except ValueError: return x # 特定のエラー型(複数)に特定することもできる def attepmt_float3(x): try: return float(x) except (TypeError,ValueError): return x # 例外の有無に関係なく発生させたい処理はfinallyで書く # このときexcept部分を省略してもよい def attempt_float4(x): try: return float(x) except: return x finally: print(typeof(x))
2.3 ファイルとオペレーティングシステム
においてファイルを用いた作業方法の基礎を扱う。
############################ ### 基本的なファイル処理 ### ############################ # ファイルを開くにはopen()を用いる path = 'example/segismundo.txt' f = open(path) # f = open(path, encodin = 'utf-8')とエンコードを指定できる # ファイルは読み込み専用モード'r'で開かれ、リストのように扱うことができる for line in f: pass # open()でファイルオブジェクトを生成した場合、close()で明示的に閉じる f.close() # 開いたファイルのクリーンアップにはwith文が便利 # これで自動的にfを閉じる with open(path) as f: lines = [x.strip() for x in f] # f = open(path,'w') とすると新しいファイルが作られる ### ファイルを読み込んだ後に用いる関数:read, seek, tell # read:値を取得 f = open(path) f.read(10) # 11番目の値を取る f2 = open(path, 'rb') # バイナリモード # tell:現在の位置を知る f.tell() # デフォルトのエンコーディングでデコードするのに本来の文字数と一致しない場合がある # seek: ファイルの位置を指定したバイト位置に移す f.seek(3) f.close()