2006-04-01から1ヶ月間の記事一覧

組み込み関数filter

リストの内包表記と同じようなことをやるfilterという関数があるそうです。 def qsort(l): print l if len(l) <= 1: return l return qsort(filter(lambda x: x < l[0], l[1:])) \ + l[0:1] \ + qsort(filter(lambda x: x >= l[0], l[1:]))

クィックソート

Haskellっぽくクィックソートを書いてみました。リストの内包表記って便利。 def qsort(l): if len(l) <= 1: return l return qsort([ x for x in l[1:] if x < l[0] ]) \ + l[0:1] \ + qsort([ x for x in l[1:] if x >= l[0] ])

参照渡し

Pythonでは関数の引数は参照渡しです。といっても数値も文字列もタプルも変更不可なので、今のところ参照渡しを実感できるのはリストくらいですね。もちろんオブジェクトでもいいんでしょうが。 >>> def f(n, l): n += 1 l.append("a") >>> a, b = 1, [] >>>…

静的スコープ

昨日の続きです。ちょっとわからなくなってきました。 >>> msg="A" >>> def f1(): print msg >>> f1() A >>> msg="A" >>> def f1(): msg="B" print msg >>> f1() Bここまではいいんですが、 >>> msg="A" >>> def f1(): print msg msg="B" >>> f1() Traceback…

PHPとPythonのglobal

休んだついでにダウンしてました。久しぶりに書きます。Pythonにはglobal文というのがあるので、PHPのglobalみたいな感じかなと思ったら違うようです。 こういう場合、PHPでは、hello1()はエラーになります。しかしPythonではエラーにならず、グローバルな変…

代入文は値を返さない

代入は式ではないんですね。でも、a=b=c=0という書き方はできるそうです。 >>> a=b=0 >>> a,b (0, 0) >>> if a=0: SyntaxError: invalid syntaxいじめてみましょう。 >>> a,b=b,c=1,2 >>> a,b,c (1, 1, 2)

ちょっとひと休み

明日からおでかけなのでちょっとお休みするかもしれません。なんかずっとフィボナッチづいてましたが、関数の使い方をちゃんと整理したいです。「http://www.python.jp/Zope/intro/instant_python_jp」の最後の方にかなり大事なことが書いてある気がします。

Rubyのyield

それに対して(あ、昨日の続きです)、rubyのyieldっていうのは、たぶんこんな感じだと思います。rubycoさんの1つめのをムリヤリPythonで書くと、 def ruby_yield(block, x): return block(x) def fib_gen(block): a, b = 1, 1 while ruby_yield(block, a): a,…

Mochikit

何故か起きております。JavaScriptの勉強してるid:jascoさんもいるので、次はMochikitの勉強誰かしないかなぁ。あれは絶対面白いと思うよ。わたしはそこまで手がまわらないので、mochikikkoさんいらっしゃい。で、「もちきっこの日記」とかになるわけです。…

yieldって何だ

ふーん。PythonのyieldとRubyのyieldって全然意味が違う(はず)なのに、結果的によく似たソースになっているのが面白い。 >>> def f(): for i in range(10): yield i >>> g = f() >>> g <generator object at 0x00CB8CD8> >>> dir(g) ['__class__', '__delattr__', '__doc__', '__getattribute</generator>…

リストを変更するメソッドは値を返さない

昨日のmyreverse1で return myreverse1(xs[1:]) + [xs[0]]これを return myreverse1(xs[1:]).append(xs[0])と書けるんじゃないかと思ったんですがエラーになりました、appendはリストの内容を変更して(破壊的?)値は返さないんですね。

ジェネレータ版

イテレータ版も書こうと思ったんですがまだよく理解していないのでまた今度にします。そのかわり、Pythonにはわたしでも簡単に書けるジェネレータがあるんです。これはPythonの面白いところのひとつだと思います。call/ccはよくわからないけど、似たようなも…

お前も反復にしてやろうか

こうかな? def myreverse2(xs): def myr_iter(src, dest): if len(src) == 0: return dest else: return myr_iter(src[1:], [src[0]] + dest) return myr_iter(xs, [])

リストに要素を足さない

最初、myreverse1(xs[1:]) + xs[0] と書いていてエラーになりました。 return myreverse1(xs[1:]) + xs[0] TypeError: can only concatenate list (not "int") to listなるほど。xs[0]はただの数値なので、リストに足しちゃだめなんですね。 return myrevers…

リストの反転

haskoさんちのリストの反転をやってみる。まあ全く同じようには書けませんが。 def myreverse1(xs): if len(xs) == 0: return [] else: return myreverse1(xs[1:]) + xs[0:1]

フィボナッチ数列いろいろ

higeponさんのScheme版 rubycoさんのruby版 takatohさんのHaskell版 sumimさんのcall/cc版(Smalltalkとruby) 4/18追記 rubycoさんのcall/cc版(ruby) 4/19追記 rubycoさんなにがなにやら、、、 rubycoさんのを見て対抗しようと思ったけど、Pythonのlambdaの中…

Python 社内勉強会 資料 - ObjectClub

(株)永和システムマネジメントさんの社内勉強会の資料だそうです。 http://www.objectclub.jp/technicaldoc/else/

反復版

id:higepon:20060416を見て反復版を作ってみました。これでいいのかな。 def fib3_iter(a, b, i, n): if i == n: return a else: return fib3_iter(b, a + b, i + 1, n) def fib3(n): return fib3_iter(1, 1, 0, n)

フィボナッチ数列

最近のトレンドとしては、やっぱりHello, Woldの次はフィボナッチ数列ですよね(!?)id:rubyco:20060228風再帰版 def fib1(n): if n <= 1: return 1 else: return fib1(n - 1) + fib1(n - 2)Pythonチュートリアルの中にあるループ版 def fib2(n): a, b = 1, 1 …

新山さんの「ぱいがめ入門」

Python によるゲームプログラミング実況中継 すごい。面白い。音声解説付きです。結構前に作られたみたいですが、いわゆる今流行のスクリーンキャストですね。pyvnc2swfを使って作られているみたいです。WindowsへのPythonのインストールとかIDLEの使い方と…

リテラル好き好き

id:m-hiyama:20060317ってひと月近く前の話ですが。私もリテラル好き好きで、特にLightWeightLanguageではリテラルの表現力って大事だと思います。そういう意味ではちょっとPerlやRubyが羨しいかなぁ。あ、Rubyはほとんど知らないんですが。Perlのq()とかqw(…

[文字列] リテラルいろいろ

せっかくなのでもうちょっと文字列を。 http://www.python.jp/doc/release/tut/node5.html#SECTION005120000000000000000 http://www.python.jp/doc/release/ref/strings.html シングルクォートとダブルクォートって、意味的には違いは無いってことかな。 >>…

文字列のフォーマット(3)

きのうはむずかしいことを考えすぎたので、単純にいっぱい練習してみたいと思います。 # 普通に >>> "%d" % 10 '10' # これもCと一緒 >>> "%04d" % 10 '0010' # 二つ以上はタプルで指定 >>> "%d %d" % (10, 20) '10 20' # 桁数もタプルで指定してみる >>> "%…

文字列のフォーマット(2)

昨日の続き。ところでPython Shellから何かわからないことを調べる手段として、help()という関数があります。 >>> help(1) Help on int object: class int(object) | int(x[, base]) -> integer | | Convert a string or number to an integer, if possible.…

Effective Python Programming - OSCON 2005

ウロウロしていたら、Effective Python Programming - OSCON 2005というPDFファイルを見つけてしまいました。英語ですが入門レベルから簡潔に書かれているようです。160ページくらいあります。まだ20ページくらいしか見てません。

そして、、、

お鍋こがした、、、

文字列のフォーマット

どこで見たのか忘れたんだけど、print文ではC言語のprintf()みたいな書式指定ができるみたい。 >>> print "%d-%02d-%d %s Diary" % (2006, 4, 11, "pylet") 2006-04-11 pylet Diary でもprint文のドキュメントにはそんなこと書いてなかったような気がした。…

あわわわわ

全然気づかなかったけどid:rubycoさんに捕捉されてるじゃないですか!!っていうかトラックバックの使いかたわかってませんっっ!!しかしrubycoさんはすごいなぁ。一月から続けてるのかぁ。わたしもあんまりがんばりすぎない程度に細々続けよう。今日は帰り…

ソースコードの行

ところで、私は行末にセミコロンが付かない言語というのをあまり使ったことが無いので、Pythonの行というのがどうなっているのか不安です。ちょっと調べてみました。 http://www.python.jp/doc/release/ref/implicit-joining.html http://www.python.jp/doc/…

イベントがあったそうで

そういえば週末はPython Workshop the Edge 2006というPythonの大きなイベントがあったみたいですね。「やり直しのための Python プログラミング」の資料がとても勉強になります。