繁体   English   中英

如何在python中为回调函数放置**kwargs参数

[英]How to put **kwargs parameter for callback function in python

我制作了用于测量功能性能的计时器功能

但是当我使用 **kwargs 作为函数的参数时遇到了问题

例如,当我只想使用 3 个参数来使用scipy.stats.zscore(a, axis=0, ddof=0, nan_policy='propagate') 时

通常我会像下面的代码一样使用

import scipy.stats as st

temp = np.array([[3,4,2],[2,2,4]])

st.zscore(a=temp, axis=1, nan_policy='omit')

但是当我通过我的函数timer测量scipy.stats.zscore(a, axis=0, ddof=0, nan_policy='propagate')的性能时,它会出错......

这是我的代码

import numpy as np
import scipy.stats as st
from time import perf_counter

def timer(f,*args,**kwargs):
    start = perf_counter()
    if args:
        f(*args)
    elif kwargs!=None: 
        f(**kwargs)
    return 1000 * (perf_counter() - start)

temp = np.array([[3,4,2],[2,2,4]])

# it has error...
# I know para =["a"=1] is wrong code... 
para = ["a" = temp, "axis" = 1, "nan_policy" = "omit"]
used_time = 1000 * np.mean([timer(st.zscore, *para) for _ in range(1000)])

# but *args works very well... 
used_time = 1000 * np.mean([timer(st.zscore, temp) for _ in range(1000)])

所以我的目标是

我想使用 ** kwargs作为定时器的回调函数的参数

请帮助我..

直接将值作为命名参数发送

timer(st.zscore, a=temp, axis=1, nan_policy="omit")

您还应该将elif kwargs != None更改为elif kwargs ,因为如果您不发送任何内容,它就不会是None ,它将是空的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM