タグ

ブックマーク / www.nishiohirokazu.org (9)

  • RSSを取得するプログラム @ NISHIO HIROKAZU # Archived COREBlog

    NISHIO Hirokazu's website > NISHIO HIROKAZU # Archived COREBlog これは2004年11月4日から2006年2月18日までZopeで運用していたCOREBlogの静的なアーカイブです。 新しい日記は「西尾泰和の日記」で運用しています。 RSSを取得するプログラム EnglishImprinterに貼り付ける英文をスラッシュドットのRSSから取ってきたら面白いかと思ってRSSの取り方を調べる。 import feedparser d=feedparser.parse("http://slashdot.org/index.rss") return d.entries[0].description えっ、3行…。さすがPython…。 追記@2004/12/09 このエントリはJythonでRSSを取得とRSSを取得するプログラム-補足

  • 西尾泰和のブログ: GRINEditを使ってソースコードの可視化その2

    GRINEditを使ってソースコードの可視化でやった奥さんのコードの可視化、 ラボの自分のマシンでやったらかなり高速に動いてくれてあっさり整形されました。 バネの強さを辺ごとに変えられるようにして、 ジャンプの辺は弱くしてみました。 っていうか前回の記事ではどうすればこの複雑にもつれたグラフをきれいに整形できるか…とさんざん考えたのに結局ハードウェアの性能が上がればあっさり解決してしまうと言うことか。 やっぱそうなんだよなぁ。 GRINEditのことを高速だとほめてくださる方はいるのですけど、 高速化には重点を置いていないんですよ。 拡張性の高さや柔軟性を高めるためなら速度は犠牲にする方針で開発しています。 しかしハードウェアの性能かぁ。 反発力の計算が14倍ほど速くなった、他。で プログラム全体で見て30%の高速化になった(略) 1746頂点の「全ての辺が8のグラフ」の描画が5FPS以

    hamasta
    hamasta 2007/04/21
    あとで読む
  • 西尾泰和のブログ: モナドを作るver. 0.1

    IOモナドは難しそうだったのでとりあえずMaybeモナドからはじめる。 >>> def Maybe(typ): class Foo(object): @classmethod def return_(_, x): return Just(x) @classmethod def bind(_, m, f): if isinstance(m, Nothing): return Nothing() elif isinstance(m, Just): return f(m.value) class Just(object): def __init__(self, x): assert isinstance(x, typ) self.value = x class Nothing(object): pass Foo.__name__ = "Maybe_%s" % typ.__name__ retur

    hamasta
    hamasta 2007/03/18
    あとで読む モナド むずそう
  • 西尾泰和のブログ: Pythonで階乗を求める(Yコンビネータ編)

    Q: 「Pythonで階乗を求める(これはひどい)」はYコンビネータ? A: いいえ。 再帰呼び出しは普通、以下のように関数が自分自身の名前を使って自分自身を呼び出します。 >>> f = lambda n: n and n * f(n - 1) or 1 >>> f(5) 120 ここで、名前をつけずに、関数自体にも手を加えずに、再帰呼び出しを実現するための手段がYコンビネータです。再帰呼び出しを実現するだけならばYコンビネータは必須ではありません。 前回のコードはYコンビネータを使わずに再帰呼び出しをしています。具体的には、元の関数をnだけを受け取るのではなく、自分自身も引数fに受け取るようにし、また再帰呼び出しでfを呼び出す際にも引数にfを渡してやるようにしています。 Yコンビネータ版は以下。 >>> Y = lambda f:((lambda g: f(lambda x: g(g)

  • 西尾泰和のブログ: PythonとRubyでパスカルの三角形ワンライナー

    rubyco(るびこ)の日記 - 呼び出し側のアスタリスクを読んで、「あ、そうか、それを使えば頭から二つずつ取ることができるか」とGame Scripting Memo - 続・パスカルの三角形のことを思い出しました。 >>> def get2(f, a, b, *rest): result = [f(a, b)] if rest: result += get2(f, *rest) return result >>> from operator import add >>> def dup(aList): return reduce(add, [[v, v] for v in aList]) >>> dup([1,2,3]) [1, 1, 2, 2, 3, 3] >>> def sandwich(bread, meat): return [bread] + meat + [bread] >

  • 西尾泰和のブログ: PythonとRubyでデフォルト引数の評価されるタイミングは違う

    驚きました。 rubyco(るびこ)の日記 - デフォルト引数は明示的に評価されると同じことをPythonで書いた場合、関数定義の時点で評価されます。 >>> def default(n): print "default", n return n + 1 >>> def foo(x, y = default(5)): print x, y default 5 Rubyでは関数が呼ばれた時にデフォルト引数を評価するようです。しかも遅延評価とかではないようで、何度も関数を呼べば何度も実行されます。つまりPythonで書けば >>> def foo(x, y = None): if y == None: y = default(5) print x, y に相当する状態のようです。

  • 西尾泰和のブログ: Pythonでイテレータの復習

    >>> class Foo: def __init__(self): self.count = 0 def __iter__(self): return self def next(self): self.count += 1 if self.count > 5: raise StopIteration return self.count >>> for x in Foo(): print x 1 2 3 4 5

  • 西尾泰和のブログ: Pythonでタブ区切りデータを出力する方法

    毎回実装するのがさほど苦にならないので、ついつい毎回実装してしまったりするタブ区切りデータの出力ですが、やっぱりたまに改行をつけ忘れたりstrで文字列にするのを忘れたりすることがあるので、まとめてみることにしました。 class TSVFile(file): def write(self, v): file.write(self, "\t".join(map(str, v)) + "\n") これは普通のfileを継承して、writeだけ独自のものに差し替えたクラスです。こうすると、以下のように普通のファイルを扱っている気分で、タブ区切りでの出力が出来ます。 fo = TSVFile("c:\\test.txt", "w") fo.write((1,2,3)) fo.write((4,5,6)) fo.close() ただし、タブ区切りじゃなくてカンマ区切りでもよくて、数字やアルファベット

  • Pythonでメモ化 @ NISHIO HIROKAZU # Archived COREBlog

    NISHIO Hirokazu's website > NISHIO HIROKAZU # Archived COREBlog これは2004年11月4日から2006年2月18日までZopeで運用していたCOREBlogの静的なアーカイブです。 新しい日記は「西尾泰和の日記」で運用しています。 Pythonでメモ化 結城さんの日記を読んで「メモ化って何だろう」と思いました。 もともとのK.Inabaさんのエントリは読んでみたけれどもメモ化の説明はなかったのでよくわからず…nobsunさんによる、HaskellのMemoiseにはメモ化の説明が書いてありました。 ふむふむ、つまり再帰的に定義されたフィボナッチ関数を呼び出すと、同じ引数で同じ関数が何度も呼び出されて効率が悪い、と。 def fib(x): print "fib(%d) was called" % x if x == 0 or

  • 1