作者: Bruce.
日時: 2005/1/14(23:10)
Bruce.です。

UNIX USERの2月号にPython 2.4の紹介記事が載っていて、デコレータの
例があったのですが読んでいて分からなかったので質問します。
ちと長いですが、誌面からスクリプトを

---
import math

def declareArgs(*argTypes):
    def checkArguments(func):
        assert func.func_code.co_argcount == len(argTypes)
        def wrapper(*args, **kwargs):
            pos = 1
            for (arg, argType) in zip(args, argTypes):
                assert isinstance(arg, argType), \
                       "Value %r dose not match %s at %d" % (arg,
argType, pos)
                pos += 1
           return func(*args, **kwargs)

       wrapper.func_name = func.func_name
       return wrapper

   return checkArguments

@declareArgs(float, float)
def calcDistance(x, y):
    return match.sqrt(x * x + y * y)

print calcDistance(3.14, 1.592)
print calcDistance(2.0, 4)

-----
で、checkArguments の引数 funcなんですがどっからわいてでたんでしょう?
そういうヤクソクなんでしょうか? 関数を引数にとる関数を返すとか。


-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
  mail kbk@...
	web  www.kt.rim.or.jp/~kbk/index.html#zakkicho
	     homepage3.nifty.com/farstar/