[英]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.