vimperatorの最新版を入れる
先日は「vimperatorの最新版を入れると画面が崩れる」と書いたけど、なんてことはない、vimperator/components/protocols.jsがシンボリックリンク用のテキストファイルなのが問題なので、hg clone
かhg pull -u
した後にファイルをリンク先のcommon/components/protocols.jsと置き換えるだけでキチンと動くようになった。
同じvimperator/componentsフォルダの他のファイルは23776eba63のコミットでcommon/componentsフォルダのファイルと置き換えられてるから解決済みだと思って違う原因を探してたんだけど、何でこのファイルだけテキストファイルのままなんだろ? 7c9761eddaのコミットで追加されてるんだけど、本体の事情なんて難しくて解らんし、英語なんで解らんし、機械翻訳して読むのすらも面倒くさいし、vimperator自体はそんなに問題無いみたいなのでまぁどうでもいいや(幾つかプラグインは動いてないけど)。
10月の読書メーター
10月の読書メーター
読んだ本の数:20冊
読んだページ数:7726ページ
特に良かった本
- 親愛なるクローン
- メモリー
- ヴォルコシガン・シリーズがメモリー以降翻訳されてないのはひどいと思う。あとは過去の話(名誉のかけら、バラヤー内乱)がまだ読まずに残っているけどもう少し取って置こう。
- 毒蛇の園
- シリーズが色物扱いされてるらしいけど(本当?)、素晴しい騙りを味わった。
- 現代短篇の名手たち3 泥棒が1ダース
- 必ず厄介事に巻き込まれる主人公ドートマンダー物のユーモア溢れる短編集。作者のドナルド・E・ウェストレイクまで好きにさせられちゃうほどの楽しさ。
- ノーストリリア
- 文章のすべてが輝くほどの美しさ。読む前の古臭い印象とは全く違ってて、一発で惚れてしまった。何故好きなのかを説明できないくらい好き。他の人類補完機構シリーズも早いうちにちゃんと読もうと思う。
近況
とにかく毎日やる気が出ない。
- vimperatorの最新版に追従しようとhgをインストするものの、最新版を入れると画面が崩れるので、いまだにr4045のまま。
- fx3.6bをインスト。別プロファイルだからかもしれないが、明かにメモリの使用量が少くなってて快適。けどバージョンチェックを無視して入れたグリモンの調子が悪いし、アドオン関係が追い付いてないのでまだ常用には適さないかな。
- ここ一月ほどはpythonでばかり書いてるけど、いまだに「rubyのこのメソッドはpythonだとどれ?」ってのでググる。
- FWの入れ替え。ZAからOutpostに。基本的な機能は揃っている上に、軽いし、定番ソフトの設定はしてくれる、自動学習モードもある、日本語化ツールもある、と何も考えずに入れるにはピッタリなんじゃないかな。
- 祖母の家のベランダの縁と庇のペンキ塗り。剥離を刮ぎ落して、サビ止めを塗って、屋根に身を乗り出し、脚立に乗って、ペンキを塗って。自分がこういう工作に向かない人間だって事がよく分かった。
続・pythonでクラスの中でのデフォルト引数に嵌った
class Test2(): alt = "fuga" def p(self, arg = alt): print arg t = Test2() t.p("hoge") # >>> hoge t.p() # >>> fuga t.alt = "piyo" t.p() # >>> fuga
あー、この方法だとデフォルト値の変更が効かないからダメだ(デフォルト値は関数定義の時にだけ評価される)。
さらに調べてみたところ、このようにするのがいまのところ一番良いみたい。
class Test3(): alt = "fuga" def p(self, arg = None): if arg is None: arg = self.alt print arg t = Test3() t.p("hoge") # >>> hoge t.p() # >>> fuga t.alt = "piyo" t.p() # >>> piyo
これはちょっと面倒だなぁ。
pythonでクラスの中でのデフォルト引数に嵌った
>>> 続・pythonでクラスの中でのデフォルト引数に嵌った - 切なさの刹那
デフォルト引数の機能を使って、メソッドの呼び出しに引数が無かった時のためにデフォルトの値を指定しておく。
alt = "fuga" def test0(arg = alt): print arg test0("hoge") # >>> hoge test0() # >>> fuga
これをクラスの中で使おうとすると、こう書いた時点でエラーを吐く。p1,p2のどちらかでもダメ。
class Test1(): def __init__(self): self.alt = "fuga" def p1(self, arg = self.alt): print arg def p2(self, arg = alt): print arg
正解はこう。
class Test2(): alt = "fuga" def p(self, arg = alt): print arg t = Test2() t.p("hoge") # >>> hoge t.p() # >>> fuga
Test1の書き方だとp1,p2のメソッドを定義した段階では__init__が呼ばれていないから、変数の用意が出来てなくてデフォルト引数の指定が失敗するというわけ。
最初からクラスの中にベタ書きしておけば問題無し。
ちなみにrubyだと一つ目の方法で書く。その代わり最初の例そのままだとエラーが出るみたい(altをローカル変数以外にすればおk)。
class Test1 def initialize() @alt = "fuga" end def p1(arg = @alt) p arg end end t = Test1.new() t.p1("hoge") # => hoge t.p1() # => fuga
alt = "fuga" def test0(arg = alt) p arg end test0("hoge") # => hoge test0() # => ERROR
Ruby, Javascriptの次にPythonを触って思ったこと
をメモしておく。
戸惑った点
文字列
クラス
- メソッド定義、呼び出しのselfが面倒くさい。
ヘルプファイル
- ドキュメントが豊かなのは良いけれど、正直文章量が多すぎて直感的に理解しづらい。
- 一つのメソッドでも、リファレンスマニュアルを読んで調べるよりもググる方が結果的には早かったりする。
良かった点
速度
- もっさりした感じが無くて、小物ツールなんかを作るには最適。
インデント
- タブのインデント自体はエディタさえちゃんとしてれば慣れる。
- そして慣れれば構造化されていて見易い。