他
トレースログ
import traceback import threading f = open('tracelog', 'a') def test_except(): try: raise SyntaxError, "example" except: traceback.print_exc(file = f) if __name__ == '__main__': th = threading.Thread(None, test_except, None) th.setDaemon(True) th.start() th.join()
時間差分の計測
import datetime t0 = datetime.datetime.now() t1 = datetime.datetime.now() t = t1 - t0 print t
yieldの不思議
def func(): msg = 'step 1' yield msg msg = 'step 2' yield msg msg = 'step 3' yield msg it = func() print it.next() print it.next() print it.next() * どこまで前に実行したか覚えているので、状態遷移マシンに使えるのである。 * 実行状態が関数と結びついているため、状態テーブルとかは作らなくてよいのが便利なの。
一時的な関数定義
seq1 = ['a', 'b', 'c'] seq2 = ['1', '2', '3'] print map(lambda x,y: x+y, seq1, seq2)
- defで関数を定義しなくても簡単なものなら埋め込める。
区切りで文字分割
import string s = '192.168.1.1' a = string.split(s, '.') print a
時刻の表示
import time print time.strftime("%Y%m%d%H%M%S ", time.localtime())
商と余り
(a, r) = divmod(13, 5) print a print r
ランダム
import random v = [] v += [random.randint(0, 99)] v += [random.randint(0, 99)] v += [random.randint(0, 99)] v += [random.randint(0, 99)] v += [random.randint(0, 99)] print v
- randintは二つめの引数の値を含む範囲の乱数を作ります。Pythonっぽくない。最近はrandrangeってのがあって、こっちを使う方がわかりやすいですよ。--sgk
メッセージダイジェスト
import sha md = sha.new() str = 'test messsage' * 100 md.update(str) n = md.digest() print (n,)
- ビット数が長いshaの160bitを使ったほうが安全です。
基底クラスの呼び出し
class ServerProxy(xmlrpclib.ServerProxy): def __init__(self, addr): t = MyTCPTransport() xmlrpclib.ServerProxy.__init__(self, addr, t)
- Pythonでは基底クラスのコンストラクタは自動的には呼び出されない。呼び出すのを忘れないように。
