ミニパターン

ミニパターン集 む。この table = {} (table[key] ||= []).push val というコードは 辞書のgetとsetdefault - pyletの日記 のコードによく似てますね。Pythonで書くと table = {} table.setdefault(key, []).append(val) かな。

辞書のgetとsetdefault

辞書に存在しないキーを普通に[]で参照するとKeyErrorになります。 >>> d = {} >>> d['foo'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'foo'd.get()を使うと、キーが存在しない場合に返却するデフォルト値を指定できます。が、d</module></stdin>…

わかち書かないでマルコフ連鎖

マルコフ連鎖プログラム - pyletの日記 以前作ったマルコフ連鎖プログラムは、実はわかち書きしないで一文字ずつの方が面白いんじゃないかという気がしてきました。 import sys, random MAXGEN = 1000 nonword = "\n" w1 = w2 = nonword statetab = {} while…

DBAPI勉強中(2)

色んなデータ型を試してみます。 import psycopg2 con = psycopg2.connect("dbname=testdb") cur = con.cursor() cur.execute("drop table if exists t") cur.execute(""" create table t( i integer, r real, n numeric, v varchar(10), t text, d date, ti…

DBAPI勉強中

PostgreSQL + psycopg2でデータベースにアクセスちゅう。PEP 249 -- Python Database API Specification v2.0 | Python.orgいわゆるプリペアードステートメントみたいな、SQLとパラメータを別々に渡すために、DBAPIでは何種類かのフォーマットが選べるみたい…

2つずつ取り出すイテレータ

やっとすこしイテレータがわかってきた気がします。itertoolsはすごく面白そう。2つずつ取り出すイテレータを作ってみました。 def take2(ls): i = iter(ls) while 1: yield i.next(), i.next() >>> for a, b in take2(range(10)): ... print a, b ... 0 1 2…

Python で blosxom をちょっとアレンンジ

Python で blosxom ! - 女子高生ぷろぐらまーなお☆のブログ参考に、いろいろ遊んでみました。 #!/usr/bin/env python import os opts = { 'data-dir' : "data", 'data-ext' : ".txt", } class BlosxomPy: class Entry: def __init__(self, file, name, time…

pythonでuniq

めちゃめちゃ(はてな記法忘れるほど)間が空いた上にとても昔の話で恐縮ですが。配列操作の比較表: Ruby, Python, JavaScript, Perl, C++ - bkブログa[:] = []とかはちょっと変だけど、やっぱりPythonてシンプルだなあと思って見ていたのですが、uniqが無いこ…

ループの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)