Python

イースターエッグ

この記事は Python Tips Advent Calendar 2012 25日目の記事です。 最後は、クリスマスとキリストで繋がった、イースターエッグについてです。 Python に隠された卵を探して楽しみましょう。 The Zen of Python import this をすることで The Zen of Pytho…

正規表現あれこれ

この記事は Python Tips Advent Calendar 2012 24日目の記事です。 Python の正規表現には、便利な機能がいくつかあります。ということで、いくつか見ていきましょう。 コメント機能 >>> import re >>> re.compile(r''' ... ^ # start of a line ... \[fon…

シグネチャ確認

この記事は Python Tips Advent Calendar 2012 23日目の記事です。 dir 関数で、そのオブジェクトが持っているメソッドの一覧を出力できます。 >>> dir("foo") #doctest: +ELLIPSIS ['__add__', '__class__', ..., 'upper', 'zfill'] また、help 関数を使…

zlib, base64, rot13 エンコーディング

この記事は Python Tips Advent Calendar 2012 22日目の記事です。 Python でデータを圧縮したい時、通常は zlib モジュールを使ったりするかもしれませんが、特に特殊な指定を必要としないのであれば、encode 関数で事足ります。 >>> s = 'Hello World!!'…

yield の戻り値を受け取る

この記事は Python Tips Advent Calendar 2012 21日目の記事です。 yield の呼び出しには戻り値があります。 普段は None ですが、呼び出し元が send 関数を使った場合、その引数が yield の戻り値として渡されます。 >>> def f(xs): ... n = None ... for…

関数のデフォルト値の初期化タイミング

この記事は Python Tips Advent Calendar 2012 20日目の記事です。 Python の関数にはデフォルト値が付けられます。 このデフォルト値は、その関数を呼び出したタイミングではなく、その関数を定義したタイミングで初期化されます。 >>> def f(): ... prin…

組み込み関数を隠してしまった場合

この記事は Python Tips Advent Calendar 2012 19日目の記事です。 Python には何も import しなくても使える組み込み関数がありますが、これらと同名の変数を定義することができます。 >>> id # id 組み込み関数 <built-in function id> >>> id = 10 # 同名の変数を定義 >>> id </built-in>…

iterable を分ける

この記事は Python Tips Advent Calendar 2012 18日目の記事です。 Python の iterable オブジェクトから生成された iterator は一度しか走査できません。 >>> xs = iter([1,2,3]) >>> for x in xs: # xs の要素を全て消費 ... pass >>> # もう消費したオ…

iter に関数を渡す

この記事は Python Tips Advent Calendar 2012 17日目の記事です。 iter 関数は、iterable オブジェクトから iterator を取り出す関数です。 >>> xs = [1,2,3] >>> it = iter(xs) >>> it.next() 1 >>> it.next() 2 >>> it.next() 3 >>> it.next() #doctest…

roundの桁数指定

この記事は Python Tips Advent Calendar 2012 16日目の記事です。 round 関数は、指定した桁で四捨五入してくれます。 >>> round(1234.5678, 2) 1234.57 実はこの値、マイナス値も指定できます。 >>> round(1234.5678, -2) 1200.0 マイナス値を指定すると…

データのフラット化

この記事は Python Tips Advent Calendar 2012 15日目の記事です。 2次元のデータを1次元のデータにしてしまいたいときがあります。その場合、リストに対しては以下のように書けます。 >>> xss = [[1, 2], [3], [4, 5, 6]] >>> sum(xss, []) [1, 2, 3, 4…

2次元データの縦と横を入れ替える

この記事は Python Tips Advent Calendar 2012 14日目の記事です。 Python では、2次元配列などのデータに対して縦と横を入れ替える(transpose)が簡単にできます。 zip を使うだけです。 >>> xss = [[1, 2, 3], ... [4, 5, 6], ... [7, 8, 9]] >>> zip(…

バッククォートでrepr

この記事は Python Tips Advent Calendar 2012 13日目の記事です。 Python2 だけですが、バッククォートは repr 関数と同じ意味になります。 >>> e = Exception('foo') >>> repr(e) "Exception('foo',)" >>> `e` "Exception('foo',)" ただし、Python2 だけ…

リストやタプルの unpack

この記事は Python Tips Advent Calendar 2012 12日目の記事です。 Python のリストやタプルは、展開した上で代入といったことができます。 >>> a, (b, c), d = [(1, 2), (3, 4), (5, 6)] >>> print a (1, 2) >>> print b 3 >>> print c 4 >>> print d (5,…

文字列のフォーマット出力

この記事は Python Tips Advent Calendar 2012 11日目の記事です。 Python のフォーマット出力は何種類かあります。 >>> print "The %s is %d." % ('answer', 42) The answer is 42. タプルによるフォーマット出力です。名前が指定できず、型指定が必要で…

filter, map に指定する関数

この記事は Python Tips Advent Calendar 2012 10日目の記事です。 通常、filter, map の第一引数には関数(callable なオブジェクト)を指定しますが、これは None であっても構いません。 None を指定した場合、lambda x: x と大体同じ意味になります*1…

内包表記いろいろ

この記事は Python Tips Advent Calendar 2012 9日目の記事です。 まず、list, set, dict は、それらを生成するための専用の構文を持っています。 >>> [1,2,3] # リスト生成 [1, 2, 3] >>> {1,2,3} # 集合生成 set([1, 2, 3]) >>> {1:1,2:2,3:3} # 辞書生成…

再 raise

この記事は Python Tips Advent Calendar 2012 8日目の記事です。 Python で受けた例外をそのまま上に伝える場合、単に raise と書くだけで伝えられます。 >>> try: #doctest: +ELLIPSIS ... raise Exception, 'error' ... except Exception, e: ... if e.m…

for-else, try-else 構文

この記事は Python Tips Advent Calendar 2012 7日目の記事です。 Python の for や try 文では、else 節を含めることができます。 >>> def find(xs, v): ... for x in xs: ... if x == v: ... print 'found' ... break ... else: ... print 'not found' >>…

外部変数のキャプチャ

この記事は Python Tips Advent Calendar 2012 6日目の記事です。 Python では、ラムダ式やローカルでの def 関数は、それらを定義した時に、外にあるローカル変数の参照を、ラムダ式や関数のオブジェクトの内部に保存します。 >>> x = 10 >>> f = lambda: …

print で標準出力以外に出力する

この記事は Python Tips Advent Calendar 2012 5日目の記事です。 ※以下の説明は Python 2 用です。Python 3 では print(..., file=sys.stderr) などになります。 print 関数はデフォルトでは標準出力に出力しますが、明示的に指定すればそれ以外の場所、標…

暗黙bool値変換

この記事は Python Tips Advent Calendar 2012 4日目の記事です。 Python はいろんな値を、暗黙に bool 値として扱います。 False として扱われるデータは以下の通りです。 >>> false = False >>> none = None >>> int_zero = 0 >>> long_zero = 0L >>> flo…

スライス操作あれこれ

この記事は Python Tips Advent Calendar 2012 3日目の記事です。 今日は Python のスライス操作についてです。 基本的なスライス操作 >>> xs = range(10) >>> xs[2:5] # 2以上5未満までのインデックス [2, 3, 4] >>> xs[:2] # 前を省略した場合は0と同じ […

文字列を複数行に書く

この記事は Python Tips Advent Calendar 2012 2日目の記事です。 >>> "aaa\ ... bbb" 'aaabbb' \ で終わると単純に結合してくれるので、このようになります。 >>> '''aaa ... bbb''' 'aaa\nbbb' """ や ''' で囲まれた文字列は、改行コードもそのまま入っ…

比較の連鎖

この記事は Python Tips Advent Calendar 2012 1日目の記事です。Python では比較を連鎖させていくことができます。 >>> x = 5 >>> 0 <= x <= 10 True これは、ほぼ 0 http://docs.python.jp/2/reference/expressions.html#comparison .

os.pipe を使って subprocess.Popen する時の注意

ファイルディスクリプタは subprocess.Popen (というか fork)時にコピーされます。 なので、親プロセスと子プロセスの両方で、必要のないディスクリプタを閉じる必要があります。 しかしこれ、子プロセスが既存のコマンド(例えば tail)だったらファイル…

Pythonで遊んだ

昨日 id:cooldaemon さん含む数人でカフェに行って話していて、 Z会三年生中学受験コース5月のてんさく問題を Python で解いてみた - cooldaemonの備忘録 の話になりました。 で、これって初期値を 1974 以外の値にしたらちゃんと収束するんだろうか? とい…