2007-01-01から1年間の記事一覧

Pythonの面倒なところ

jijixi's diary: Ruby に比べて Python の面倒なところ (http://jijixi.azito.com/cgi-bin/diary/index.rb) なるほど。確かに、jijixiさんが挙げられている面倒なところは使い捨てツールを作る際に面倒となることばかりだと思う。これはPythonが、可読性の高…

Office Open XMLフォーマット

Office 2007からWord、Excel、PowerPointでXMLフォーマットがデフォルトのフォーマットになるらしい。もちろん、以前からの独自のバイナリ形式も互換性を持つが、XMLはテキスト形式なのでかなり扱いやすくなると思われる。今まではPythonで非標準のwin32com…

Effective Python

minidom (http://morchin.sakura.ne.jp/effective_python/minidom.html) を公開した。ソースの色が一色なので、せめてアウトプットの部分だけでも色づけしないと見づらい。面倒だけどいちいち<span class="..."></span>でくくるしかないのかな…。時間あるときに修正しよう。

GUIビルダー

wxPython用?のGUIビルダーとして以下の2つがあることを知った。 XRCed wxGlade XRCedの方はwxPythonに付属しているらしい。メニューから起動できるインストーラもある。wxGladeの方はPythonのコードに落とす方法がよく分からなかった。XRCedの方はサイザーの…

3.0a1の新機能 (1)

以下を基にしたまとめ。 Python Documentation: What's New in Python 3.0 (http://docs.python.org/dev/3.0/whatsnew/3.0.html) print関数 printが文から関数になった。()を付けないとSyntaxErrorが発生。詳細は、PEP 3105を参照。 print(value, ..., file=…

Python信者

同志だ! 偏った言語信者の垂れ流し: Rubyの楽しさPythonの楽しさ (http://d.hatena.ne.jp/nullpobug/20070919) 私のポリシーで導入容易性(installability)は重要なので、これができてない言語やらフレームワークは、基本的に使うに値しない 全く同感。Ruby…

イベント

イベントに関して イベントは、イベントクラスとイベントタイプの2つにより、どのイベントかを区別できる。 イベントは、wx.Eventクラスのサブクラスとして表現される。例えば、wx.MouseEventクラスなど。 イベントタイプは、wx.EventクラスのGetEventType()…

wxPythonことはじめ

wxPythonでFrameを表示する最小プログラム >>> import wx >>> app = wx.PySimpleApp() >>> frm = wx.Frame(None) >>> frm.Show() True >>> app.MainLoop() 出力のリダイレクト wx.Appの__init__メソッドで指定する。redirectをTrueにすると出力用のFrameが表…

flatten_for

どう書く?org: 九九の表示 (http://ja.doukaku.org/62/) 普通に解けば単純な2重ループだが、1重ループに変換するにはflatten_forを使う。flatten_forは、ネストしながらループする。flatten_forは8月31日の日記を参照。 for i, j in flatten_for(range(1,10)…

リスト、辞書、セット

シャローコピー Pythonクックブック第2版の「オブジェクトのコピー」のまとめ。 リストL list(L) copy.copy(L) [x for x in L] L[:] L + [] L * 1 辞書d dict(d) copy.copy(d) d.copy() d1={}; d1.update(d) dict(d.items()) dict(d.iteritems()) セットs se…

VBAはかなりクセがある

VBA

オブジェクトの操作 (参考) Office TANAKA: VBA高速化テクニック(Selectするな!) (http://officetanaka.net/excel/vba/speed/s2.htm) セルやシートの操作は基本的にオブジェクトを直接操作できる。しかし、グラフなど一部のオブジェクトではオブジェクトをAc…

Excel 2003の制御

Excelの制御は結構難しい。Excel自体も使いづらい。慣れていないからかもしれないが、以下気づいた欠点。 Pythonのwin32comを利用して数十万個のセルに値を入れる処理書いたらとてつもなく遅くて使えない。 PyExceleratorでも同様。VBScriptでも同様。 1つの…

リストのソート方法

リストLのソートは以下の3通りで全て解決可能。ここで、値はリストの要素を表し、キーはソートの比較対象を表す。 値そのものがキーとなる場合 そのままソート可能 => L.sort()もしくは、sorted(L) 値の中にキーが含まれている場合 キーワード引数keyを使用 …

Excel VBA

VBA

仕事でExcel VBAを使ったが思ってた以上に難しかった。まずマクロレコードしてそのまま実行ができなかった。余計な処理も入ってしまうので、基本的には修正が必要となる。 あと、VBAで複雑な処理をあまりやらない方が良いと言われた。全てVBAでやってしまう…

3.0a1リリース

Python 3.0a1 Release (http://www.python.org/download/releases/3.0/) 3.0a1に追加されたもの、2.5.1から削除されたもののまとめ。上の行が追加されたもの。下の行が削除されたもの。 __builtins__ BufferError, __build_clss__, bin, bytes, exec, format…

python-ogre

PythonMatrixJp: python-ogreの開発環境整備 for Windows (http://python.matrix.jp/projects/pyogre/install.html) PythonMatrixJp: カーシムを作ってみよう。 (http://python.matrix.jp/projects/pyogre/carsim.html) python-ogreは良さそう。少し勉強して…

小町算 (5)

組み合わせを作るところをflatten_for関数を使って書いてみた。 # 今までの方法 a = [['1']] for n in map(str, range(2, 10)): b = [] for s in a: for o in ['+', '-', '*', '/', '']: b.append(s + [o, n]) a = b # flatten_forを使った方法 ops = ['+', …

n次元ループを1次元ループに変換する (3)

どう書く?org: 全ての組み合わせ (http://ja.doukaku.org/comment/2358/) #2358をジェネレータに対応するように書き換えた。 import itertools def flatten_for(*args): D = dict([(id(L), L) for L in args]) def flatten_for_(*args): if not args: yield …

ジェネレータのコピー

自分で定義したジェネレータのインスタンスをコピーできない。 >>> import copy >>> def foo(): ... yield 1 ... yield 2 ... >>> copy.copy(foo()) ...(略)... TypeError: object.__new__(generator) is not safe, use generator.__new__() もちろん、f1 = …

n次元ループを1次元ループに変換する (2)

先日のflatten_forは、n次元ループを1次元ループに変換と考えたが、2つ以上のリスト(やイテレータ)を組み合わせて回す場合、以下の2通り存在する。 平行に組み合わせて回す (zipやenumerate) 階層的に組み合わせて回す (flatten_for) 2番目の階層的に組み合…

Short Coding本

今日購入して少し読んだ。内容はすばらしく、歴史に残る本だと思う。言語がCというのは一番ターゲット人口が多い言語だと思うので仕方がないが、他の言語にも応用できると思うのでPythonに応用しようと思う。 最近、仕事でグラフィックを描くライブラリが必…

デコレータ

@A @B @C(args) def f(): pass は、 _deco = C(args) f = A(B(_deco(f))) を意味する。

n次元ループを1次元ループに変換する

プログラミング日記: n回のループの一般形はどう書けるのか? (http://d.hatena.ne.jp/morchin/20070815#p1) 以前の日記の内容をまとめただけだが、以下のようになる。以下の flatten_for は、n次元ループを1次元ループに変換する汎用的な関数である。 from …

特異メソッド

jijixi's diary: 特異メソッドっぽいもの (http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20061231#p06) jijixi's diary: Python だって結構泥縄指向 (http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20061231#p05) Rubyの特異メソッドはきち…

無限リストの停止条件

>>> from itertools import * >>> # 通常こうする >>> for x in islice(count(), 3) ... print x 0 1 2 >>> # izipを利用する >>> for x,i in izip(count(), xrange(3)) ... print x 0 1 2 途中の要素をスライスする場合は使えないが、個数分取り出すときに…

ループのprev, curr, succの要素の取り出し

>>> from itertools import * >>> a = [1,2,3,4] >>> prevs = chain([None], a) >>> succs = chain(islice(a, 1, len(a)), [None]) >>> for prev,curr,succ in izip(prevs, a, succs): >>> print prev, curr, succ None 1 2 1 2 3 2 3 4 3 4 None Rubyだと結…

リストの範囲外の要素のアクセス

jijixi's diary: そのインデックスに要素が存在するかわからないときの書き方を考える (http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20070816#p02) 以下の方法を考えた。 # 1) EAFP try: [1,2,3,4][5] print 'ok' except: print 'ng' # 2) and,or…

accumulator

enbug diary: PythonでSICP (http://enbug.tdiary.net/20061208.html) なるほど。accumulateってこう書くのか。 # 繰り返し版 def accumulate(combiner, null_value, term, a, next, b): r = null_value while a <= b: r = combiner(r, term(a)) a = next(a)…

n回のループの一般形はどう書けるのか?

どう書く?org: 全ての組み合わせ (http://ja.doukaku.org/comment/2149/) 以下はoceanさんの解答にコメントを付けたものである。 def cross_product(*a): stack = [] def traverse(i): if i == len(a): # 再帰では、終了条件が必要 yield stack[:] else: for…

与えた条件を満たす候補

どう書く?org: 与えられた条件を満たす候補 (http://ja.doukaku.org/43/) Pythonでは演算子の優先順位が高い方から順に not x and y x or y のようになっているらしい。つまり、以下の式は True or False and False True or (False and False)と評価される。…