Python
気付けば今年も後ひと月ちょっと、ここのところ会社滞在時間が延びてるなぁ。。。 Anacondaとかvirt-installとかPythonのコードを眺める機会も増えてきた。 まだまだ訳分からないけど、ちょっとずつでも読み進められるようになろう。 シーケンスの要素とイン…
条件に応じて関数呼び出し Pythonでは、swith~caseは使えないのでif~elif~elseで条件分岐を作って、関数呼び出しが自分で考えつく方法ディクショナリとget()を使うと、条件分岐を作らなくても実現可能。とっても見やすい。 if~elif~ 相当をやっているのが、g…
ディクショナリの部分集合作成 前回dict()とzip()を使って、ディクショナリを作ったが、ちゃんと理解出来てなかったので復習。 これがよくわかってなかったので今日やった部分集合作成がチンプンカンプンだった。まず、マップ型のヘルプを見ると、以下のよう…
ディクショナリの操作(作成、検索、追加) ディクショナリの作成は、dict()を使うことで、keyとvalueのシーケンスから行える。 おかげで、{'key':'value'}の構文を使用しなくても済む。また、存在しないキーに対する検索でもKeyError例外を出さないようにする…
リストで行列を表現 リストの要素を行列の列に見立てると以下のように足す、引く、掛けるの演算が出来る。 割るは、逆行列のかけ算と定義すれば良いが、逆行列の算出方法自体を忘れてしまったので今回はパス。 [kobakoba0723@fedora13-intel64 ~]$ cat calc_…
リストのリスト リストのかけ算をする時には気をつけなければいけない。 リストのかけ算は、リストの要素を乗数分新しく作るのではなく、同じ要素に対する参照を乗数分作るだけ。 # ベタにリストのリストを作る >>> multi1 = [[0, 0, 0], [0, 0, 0], [0, 0, …
オブジェクトのコピー Pythonでは明示的にしないと、オブジェクトのコピーはされない。 immutableオブジェクトの場合は気にしなくても良いけど、mutableオブジェクトの場合は気にしないといけない。 代入文は参照先の共有ってことに注意。ビルドインクラスの…
dateutilモジュールの続き rrule 繰り返し処理を簡単に出来る。 >>> from dateutil.rrule import * >>> from datetime import * >>> import calendar >>> today=datetime.today() >>> firstday=today.replace(day=1) >>> lastday = today.replace(day=calend…
dateutilモジュール。 インストール サードパーティのモジュールなのでまずはインストールから。 サイトからtarballを持ってくるやり方もあるみたいだけど、easy_installでインストール可能なので、 [kobakoba0723@fedora13-intel64 ~]$ easy_install python…
日付の続き、今日はdatetimeモジュール*1。明日はdateutilモジュールを使ってみる。 datetimeモジュール 基本的な日付型および時間型を扱うためのモジュール。次の5つのクラスが属している datetime |- class timedelta : time/date/datetimeクラスの2つの…
昨日のめざせ会社の星を観てたら、「25分作業して5分休憩する」ってことをやってる人が出てた。 調べてみると、この方法「ポモドーロ・テクニック」って呼ばれてる時間管理術。 「○ポモドーロ」って見かけたり、翻訳本「アジャイルな時間管理術 ポモドーロテ…
ファイル操作の続き 特定ディレクトリの探索(glob) globモジュールは、Unix 形式のパス名のパターン展開をしてくれるので、 下位ディレクトリを調べる必要がないような探索にはos.walk/fnmatchを使わなくてもよい。 globモジュール自体が、os.listdir()/fnma…
ファイル操作の続き ディレクトリの探索(os.walk, fnmatch) os.walk(top)を実行すると、(dirpath, subdirnames, filenames) を返す。 [kobakoba0723@fedora13-intel64 ~]$ ls -R top/ top/: eggs.txt spam.txt sub top/sub: hoge.data piyo.data >>> import …
ファイル操作の続き zipファイルを扱う(zipfile, tempfile) zipfileモジュールを使うとzipファイルの内容物を表示したり、展開したりできる。ZipFile.namelist()を使うと内容物の名前を取得できるけど、 ZipFile.infolist()を使うと内容物に関する名前とかサ…
2章はファイル操作について 特定の行を読む(linecacheモジュール) linecacheモジュールを使うと、テキストファイルの各行にランダムにアクセスできる。 linecache.getline(filename, line_number)はline_number行目のデータを返す。 もし、line_number行目が…
初めてのPythonを一通り読み終えたので、今度は実践的なコードを読んで勉強してみる。今の自分に理解できる部分がどれぐらいあるかな。 オブジェクトの型判定 あるオブジェクトがどのクラスのインスタンスかを判定するにはisinstance()を使う。 type()の復帰…
良いコードを書く技術っていう本を読んでます。 各言語のコーディング標準には目を通しておくとよいということで、 PEP8を読んでみたら、まぁ色々と標準スタイルから外れてることをしてる。。。毎回毎回コードを書く時にPEP8を見ていると覚えるんだろうけど…
勉強を始めて8ヶ月、やっと最後まで来た。 次は何をしようかな。 とりあえずの候補は Python クックブック 基礎から学ぶソフトウェアテスト 入門 GNU Emacs sys.exc_info 直近で発生した例外についての情報を取得するための関数 復帰値は(type, value, trac…
前の章に引き続き例外について 例外の種類 大きく分けて2種類 ビルドイン例外 ユーザ定義例外 ビルドイン例外 あらかじめ定義されている例外(クラス)で階層構造になっている。 BaseException Exception StandardError ArithmeticError FloatingPointError .…
例外に関連するステートメントは4つ try/except/else/finally raise assert with/as try/except/else/finally 発生した例外を検知/処理するためのステートメント 構文とそれぞれのブロックの意味 try: # 例外が発生する可能性のあるステートメント <statement> except </statement>…
ここでは、関数を文字列に置き換えるデコレータをやった。 デコレータがどう処理されるかがわかったので、今度は関数の機能を拡張(?)するデコレータをやってみる。 クロージャを使ったデコレータ(引数なし) まずは、関数を使ったデコレータから。クロージャ…
スタティックメソッドとクラスメソッド 2.2でstaticmethod, classmethodというビルドインオブジェクトが追加され、 呼び出しにインスタンスを必要としないスタティックメソッド、クラスメソッドが定義できる。 定義可能なメソッドは以下の3種類 インスタン…
__getattr__ / __setattr__ / __getattribute__ __getattr__は、オブジェクトツリーに存在しない属性へのアクセスがあった時だけ呼び出される。 __setattr__は、オブジェクトツリーに存在するしない関わらず呼び出される。 [kobakoba0723@fedora13-intel64 ~…
XMLを解析したい用事が出来たので、折角だからPythonでやってみたところ、 日本語を含むXMLだったのでUnicodeEncodeErrorが出てしまった。。。 「Unicode文字列って何?」状態だったので、やったことを忘れないようにメモメモ。 XMLパーサー 代表的なパーサ…
属性検索順制御 スーパークラスとして、ビルドインオブジェクト/objectを指定したクラスのインスタンスでは、 属性の検索が幅優先で行われる。 それだと困る(深さ優先にして欲しい)場合は、優先したい属性をクラスの中で明示的に指定する。 [kobakoba0723@fe…
getattr(X, N) Xに所属するNという属性を返す関数。 X.Nとの違いは、getattrではNに”文字列を返す式"を使うこと。 文字列を返す式の1つがNに変数を渡すことX.__dict__[N]との違いは、getattrでは上位クラスの属性の検索が行われること。 [kobakoba0723@fedo…
IS-A関係, HAS-A関係 A is a Bから来ているのがIS-A関係。 「AはBの一種」なので、Aの中でさらに何かに特化したのがB。A has a Bから来ているのがHAS-A関係。 「AはBを含んでいる」なので、AはBの構成要素。参考:オブジェクト思考 is-a関係とhas-a関係:継承…
名前空間 = ディクショナリ サブクラスにスーパークラスの属性が継承される時に起こるのは「ディクショナリのリンク」 [kobakoba0723@fedora13-intel64 ~]$ cat namespace.py #!/usr/bin/env python class C1(object): c1_data = 1 def __init__(self, value…
演算子のオーバーロード __getitem__ と __iter__ どちらも反復処理を実現させるのに使う。 __getitemm__はインデクシング処理に対応するフックメソッド*1 __iter__はイテレータプロトコルに対応するフックメソッド 反復処理には次のようなものが該当する。 …
class ステートメント def ステートメントと同じような動き 該当モジュールが読み込まれた時に実行される クラス名に指定したクラスオブジェクトを生成し、クラス名の変数に代入する クラスは名前空間として考えられる クラスのなかで代入された変数はクラス…