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

ループのelseの続き

(これがどんな時に便利か、を考えてあとで書く) といいつつ、Pythonのドキュメントに書かれているのと比べて特別面白い例を思いつきませんでした。break 文と continue 文と ループの else 節それより少し悲しいことに気がつきました。別の言語(というか…

ループのelseとtryのelse

Pythonはかなり*ふつう*の言語だなあという気がします。なので、「嫌い」という理由でPythonを使わない人はいたとしても、「わからない、難しい」という理由でPythonを使わない人は少ないのではないかと思います。そんな*ふつう*の言語Pythonの中でも、ちょ…

関数の引数いろいろ

キーワード引数 >>> def f1(a, b): print a, b >>> f1(1, 2) 1 2 >>> f1(b=1, a=2) 2 1 >>> 可変長引数をタプルや辞書で受け取る >>> def f2(a, *b, **c): print a, b, c >>> f2(1, 2, 3, d=4, e=5) 1 (2, 3) {'e': 5, 'd': 4} 先頭の引数 1 は a に格納され…

関数定義、基底クラスのメソッド

すっかりこの日記の存在すら忘れてました。久しぶりにPythonでプログラムを書こうと思ったら、激烈にパイソン力が低下しておりました。 とりあえず関数を定義しようと思ってsubだったかfunctionだったかと悩んでいたらdefだった(0点) クラスAを継承したク…

モンティ・ホール問題

モンティ・ホール問題 - Wikipedia モンティ・ホール問題とは、 3つの扉があって、それぞれの後ろには、1つは商品、残り2つは山羊がいます 司会者はどのドアが商品かを知っています。プレイヤーは知りません プレイヤーがまず3つのうちの1つを選びます 次に…

&&,||,!じゃなくand,or,not

論理演算子は、そういうことです。 ビット演算子は&,|です。ビットの反転は~かな。

Dive Into Python

Dive Into Pythonをパラパラとみています(英語をとばしてコードを中心に)。http://diveintopython.org/regular_expressions/roman_numerals.htmlでは、ローマ数字(IIIとかIXとか)とアラビア数字の変換をやっているみたいです。 これを見て、そうだアラビ…

Python 2.4 クイックリファレンス

移転 Python 2.4 クイックリファレンスどのバージョンで追加された機能か色分けされているクイックリファレンスです。追記:2007-03-14 リンク先を修正しました。

Python標準ドキュメント和訳が 2.4 に対応

http://www.python.jp/Zope/PyLog/1147389051/index_html素敵です。

スコープは静的に決まる

以前わたしが疑問に思っていたことについて、id:mhrsさんが書かれています。HM weblogなるほど。やはりその変数がローカルかどうかは実行前に決まるんですね。

複素数

最初、mathモジュールを使おうとしたらlogやexp関数で複素数が使えなかったため、cmathモジュールを発掘することになりました。 pythonで書いてみました。 - しがないプログラマ の日記 なるほど、cmathモジュールですか。ところで私は「i = complex(0,1)」…

目標

ちょっとまったり気味になってきたんですが、まだPythonに関してわからないことは沢山あります。どうも重箱の隅ばかりつついて満足してしまう癖が,,, ε( v ゚ω゚) <クラスとか例外とかまだぜんぜんやってないし ε( v ゚ω゚) <モジュールとかまだぜんぜんやって…

MeCabとPythonでマルコフ連鎖

Pythonでマルコフ連鎖を書いている方を見つけました。http://yamashita.dyndns.org/blog/markov-chain-by-mecab-and-pythonわかったこと。 だいたい一緒 random.choice()というのが便利そう

三項演算子のかわりにand/or

もうひとつ。以前Pythonに三項演算子が無いことを嘆いておりましたが、andとorを使うことで同様のことができるそうです。これは先に挙げたPython Idiomsのサイトにも書いてありますが、先にこちらで知りました。 http://www.geocities.jp/shido_takafumi/py/…

has_keyのかわりにinを使う

ふらふらしていたら、こんなサイトを見つけました。昨日、マップに対してhas_keyして云々というのを他に書き方無いのかなと書きましたが、ここでは、has_keyのかわりにinを使いましょうといっているようです。 http://jaynes.colorado.edu/PythonIdioms.html…

マルコフ連鎖プログラム

プログラミング作法に載っていたマルコフ連鎖プログラムを作ってみました。プログラミング作法作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博出版社/メーカー: アスキー発売日: 2000/11メディア: 単行本購入: 58人 クリック: 1,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…