python函数匹配任意数目的参数

来源:互联网 发布:mac 不让安装不明文件 编辑:程序博客网 时间:2024/06/06 10:49
通过传递任何发送进来的参数来支持具有任意参数的任意函数:
def tracer(func, *pargs, **kargs):    print('calling:', func.__name__)    return func(*pargs, **kargs)def func(a, b, c, d):    return a + b + c + dprint(tracer(func, 1, 2, c=3, d=4))

tracer收集参数,然后以varargs调用语法来传递它。
返回结果:

('calling:', 'func')10

对模块计时:

#File mytimer.pyimport timereps = 1000repslist = range(reps)def timer(func, *pargs, **kargs):    start = time.clock()    for i in repslist:        ret = func(*pargs, **kargs)    elapsed = time.clock() - start    return (elapsed, ret)

计时脚本:

#file timeseqs.pyimport sys, mytimerreps = 10000repslist = range(reps)def forLoop():    res = []    for x in repslist:        res.append(x + 10)    return resdef listComp():    return [x + 10 for x in repslist]def mapCall():    return list(map(lambda x: x + 10, repslist))def genExpr():    return list(x + 10 for x in repslist)def genFunc():    def gen():        for x in repslist:            yield x + 10    return list(gen())print(sys.version)for test in (forLoop, listComp, mapCall, genExpr, genFunc):    elapsed, result = mytimer.timer(test)    print ('-' * 33)    print ('%-9s: %.5f => [%s...%s]' %           (test.__name__, elapsed, result[0], result[-1]))    

返回结果:

2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]---------------------------------forLoop  : 1.60391 => [10...10009]---------------------------------listComp : 0.77515 => [10...10009]---------------------------------mapCall  : 1.73903 => [10...10009]---------------------------------genExpr  : 1.18348 => [10...10009]---------------------------------genFunc  : 1.14585 => [10...10009]