素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

python

キャッシュと効率

Life is beautiful: Python Hack : 噛めば噛むほどおいしくなるクロージャの話を見て、いろいろと気になるところがあったので書いてみる。 import yaml def _get_from_disk(): data = open('config.yaml').read().decode('utf8') config = yaml.load(data) …

重み付き配列

重みを考慮しつつランダムに配列から値を取り出す。 javascripter's gist: 180816 — Gist に置いた。 人口密度を元に、都道府県を取り出す場合を例にとって説明する。 |東 京|大 阪|神奈川|埼玉|..|.||上記のように一本の線として捉えて、chioce時にrand(0, …

rangeとジェネレータとzip

range()オブジェクトとジェネレータの違いについて調べた。 def enum_from_to(begin, end): i = begin while i < end: yield i i += 1 まず、rangeの機能を限定したようなジェネレータを定義する。 print (list(zip(enum_from_to(0, 10), enum_from_to(0, 10…

@classmethod

Pythonの@classmethod等はデコレータと言うらしい。 def beforehello(f): print "Hello" return f class Foo(): @beforehello def foo(self): return 1 Foo().foo() # "Hello" # 1 beforehelloにdef foo…の関数が渡されて、その戻り値が実際のメソッドとして…

変数のスコープ等

Pythonのローカル変数のスコープはどうなってるのか。 def make_counter(i=0): def succ(): tmp = i i += 1 return tmp return succ counter = make_counter() conter() """ Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in s</stdin></module></stdin>…

OS XでPython 2.6のインストール

Download Pythonから、Python 2.6 for Macintosh OS Xをダウンロード。 すでに入れていたPython 2.5を/Applications/から削除する。 で、普通にインストール。 Terminalから、 % python -V して、Python 2.6と出ればOK。 僕の場合、Python 2.5と出たので、 %…

配列のシャッフル

追記:from random import shuffle from random import random shuffle = lambda lis: [i[1] for i in sorted([[random(), i] for i in lis], lambda x, y: cmp(x[0], y[0]))] shuffle(range(10)) # [9, 1, 2, 3, 0, 8, 7, 5, 6, 4] list#sortは破壊的なので…

素数を探す

Pythonのrange関数は、個数が決まっていないと使えないので、無限ループして条件が揃ったらbreak、みたいな使いかたができない。 なので、infrange関数を作っておくと便利かもしれない。 def infrange(start = 0, step = 1): while True: yield start start …

4Uから画像をダウンロードする

imgフォルダ以下にダウンロード。 #!/usr/bin/env python import urllib2 import urllib import urlparse import os import time from BeautifulSoup import BeautifulSoup BASE_URL = "http://4u.straightline.jp/?page=" if not os.path.isdir("img"): os.…

Python、クロージャ、自己代入

一回目に実行した時に上書きすればできるみたい。 def power(*args): memo = {} def tmp(n): if n in memo: print "memoized" ret = memo[n] else: ret = 0 for i in range(n): ret += n memo[n] = ret return memo[n] global power power = tmp return powe…

ファイル読み込み、yield

追記:コメント欄によると、openをforで回す時、自動的にcloseされるので下のようにはしなくていいみたい。 下のソースをtest.pyとして保存して実行すると、自分自身のソースコードを表示する。 #!/usr/bin/env python def getline(fname): f = open(fname) f…

unique、ジェネレータ

連想配列のキーに使えないものが配列の要素に入ってると駄目だろうけど、数値とか文字列とかTupleなら動くと思う。 def uniq(lis): done = {} for it in lis: if it not in done: done[it] = True yield it [i for i in uniq([3, 4, 2, 1, 3, 4, 6, 8, 1])] …

数字にコンマを振る

一応出来たには出来たのだけど、すごく格好が悪い。JavaScriptの感覚でstr(num).split("")ってすると、ValueError: empty separator。 list(str(num))だと平気。なんでだろう。 def toCommaStr(num): nums = list(str(num)) sz = len(nums) ret = nums[:sz %…

Python、FizzBuzz

ついさっきPythonをはじめた(教わった)ので、FizzBuzzを書いた。 for i in range(1, 100 + 1): if i % 15 == 0: print "FizzBuzz" else: if i % 3 == 0: print "Fizz" else: if i % 5 == 0: print "Buzz" else: print i sudo easy_install ipython して、ipy…