IronPythonの設定

ベースはこれ。


Python & IronPython 入門
合併のお知らせ|OKIソフトウェア


このページがなくなっても困らないように一部抜粋と追加で設定した部分は以下の通り。

後でまとめたい。


ダウンロードする
解凍する
適当なディレクトリに置く
環境変数でPATHを切る
(適当なディレクトリ)\IronPython-1.0.1\Lib\site.pyを以下のようにする

import sys
import clr
from System.IO import Path, Directory, FileInfo

dir = Path.Combine(sys.prefix, 'DLLs')
if Directory.Exists(dir):
    sys.path.append(dir)
    files = Directory.GetFiles(dir)
    for file in files:
        if file.lower().endswith('.dll'):
            try:
                clr.AddReference(FileInfo(file).Name)
            except:
                pass

sys.path.append(r'C:\Python25\Lib')
sys.setdefaultencoding('cp932')


便利な技

[インタラクティブのときのオートインデント]
ipyのショートカットに「-X:AutoIndent」をつける

Rubyの括弧の省略

先日putsの動作が意図した通りにならない件の原因は、
複数の引数があるメソッドを連結させた場合に、
グルーピング目的の括弧とメソッド呼び出しの括弧の間で
優先順位の問題が発生するためらしい。*1


以下、Try Ruby!での実験結果。
http://tryruby.hobix.com/


まずは、関数の登録。

>> def add a, b 
.. a + b  
.. end     
=> nil          

2つの引数の足し算である。


puts add(add(1, 2), 3) のつもりで次のを書く

>> puts add add 1, 2, 3    
ArgumentError: wrong number of arguments (3 for 2) 
 from (irb):4:in `add' 
 from (irb):4   

当然だめ。


add(add(1, 2), 3) のつもり。

>> add add 1, 2, 3  
ArgumentError: wrong number of arguments (3 for 2)    
 from (irb):5:in `add'
 from (irb):5

当然だめ。これは納得。


add 1,2 の部分だけ括弧。

>> add (add 1, 2), 3  
=> 6 

これはOK?グルーピングの括弧として認識されている?なんで?


putsをつける。

>> puts add (add 1, 2), 3  
ArgumentError: wrong number of arguments (1 for 2) 
 from (irb):7:in `add' 
 from (irb):7 

だめ〜。put add(add(1, 2)), 3と認識されている?


スペースをつめてみる。

>> add(add 1, 2), 3 
SyntaxError: compile error 
(irb):8: parse error, unexpected ',', expecting $
add(add 1, 2), 3 
              ^       
 from (irb):8

パースすらできない。

>> add(add 1, 2) 
ArgumentError: wrong number of arguments (1 for 2)
 from (irb):9:in `add'
 from (irb):9
 from :0

そりゃ、そうだよねぇ。

>> add (add 1, 2), 3 
=> 6 

やっぱり、OK


わけがわからん。
実装で差が出そうな感じ。

*1:メソッド呼び出しの括弧の方が優先らしい。しかし、実験結果から見ると違うようだ

括弧の省略

ただ、1つ気になる点があった。
メソッド呼び出しで括弧を省略している点である。
これは、Rubyの売りで本書ではこれを散々使っている。


私も最初は好んで使っていたが、今はあまり好きではない。
なぜかは、本書を見ればわかると思う。
putsでは括弧を時々使わくてはいけないのである。
引数が複数あるメソッドに対するputsは
括弧をつけないと文法解釈がうまくいかなくて警告(エラー?)となるという
ごく当たり前のことが原因であり、
訳知り顔で「優先順位を考えればさぁ当然でしょ」
といってしまいかねないところだ。


でも、よく考えるとこれはいいデザインなのかと疑問が残る。
まず、初心者の立場になって考えるとはっきり言ってわかりにくい。
美しい、とかタイプ量が少ないとかよりも
意図しない動作を減らす方がよっぽどよい。
それに、きちんと理解した今でもイライラする。


私が一番嫌なのは、
デバグなどでちょっと表示させようとして
その行にputsとつけたときに、エラーになることである。
逆のパターンは最悪で
自分のコーディングスタイルを守るために
いちいち括弧を外さなくてはならない
(あるいは式全体に括弧をつけたり、外したりする)


こんなんでいいのだろうか?
で、結局括弧の省略はほとんどやめてしまった。

初めてのプログラミング

初めてのプログラミング

初めてのプログラミング

ほぼ読み終わった。*1
少ない要素で無駄なく教えるよい本。
「オブジェクト」はすぐ出るけど、
「クラス」がなかなか出てこないところがいい。

*1:10/11読了

Python文字列の正規表現

色付けのための文字列の正規表現を修正してみた。


最初

[ur]?

を頭につければよいと思った。


でも、rawとUnicodeの併用の時も色付けしたい、
不要なものまで色付けしたくないなどと考えうちに迷ってしまった。

(ur?|r)?

でいいかなと思っていたところで
Pythonの仕様を確かめてみたら、
なんと大文字もOKらしくて

(u|r|ur|U|R|UR|Ur|uR)?

とするのが正しいみたい。


すごい大げさ。

秀丸アップデート

秀丸をVer.5からVer.6.02にアップデートした。
今回のアップグレードはアウトライン機能が充実していて、
また一歩IDEに近づいた感じ。


今回からの機能ではないが、関数一覧で関数をクリックして
コピーすると関数丸々コピーできてしまうのは
コピペプログラムを助長しているような・・・。