wiki:Python/Snippet/

Version 5 (modified by nakiki, 13 years ago) (diff)

--

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では基底クラスのコンストラクタは自動的には呼び出されない。呼び出すのを忘れないように。