Python中的可选可调用类型提示

5fjcxozz  于 2023-04-13  发布在  Python
关注(0)|答案(1)|浏览(94)

我开始尝试在Python中使用类型提示,我遇到了一些可选可调用类型的问题。这可能很容易解决,但我不确定如何解决。
例如,我在问题中附加的函数。

from typing import Callable, Optional
import numpy as np

def running_mean(
    xx: np.ndarray,
    yy: np.ndarray,
    bins: np.ndarray,
    kernel: Optional[Callable[[np.ndarray], np.ndarray]] = None,
) -> np.ndarray:
    # if there is no input kernel function fall to default (which is a gausian kenrnel)
    weight_func = kernel
    if kernel is None:
        _width = (xx.max() - xx.min()) / 10
        weight_func = lambda x: np.exp(-((x) ** 2) / (2 * _width**2)) * (
            np.abs(x / _width) < 2
        )

    smoothed = np.array([np.average(yy, weights=weight_func(xx - x)) for x in bins])

    return smoothed

我想用这个函数来计算一些输入数据的运行均值。运行均值的权重是通过核函数计算的。我希望这个函数是可选的,所以如果用户没有提供任何东西,它将使用高斯核。
但是,我的IDE(Visual Studio Code)突出显示了这一行:

smoothed = np.array([np.average(yy, weights=weight_func(xx - x)) for x in bins])

这个错误:
类型为“None”的对象不能被调用Pylance(reportOptionalCall)
(变量)weight_func:((x:未知)-〉任何)|((ndarray)-〉ndarray)|无
我的问题是:我怎样才能表明<weight_func>不能再是None类型?
任何建议都欢迎!

vhmi4jdf

vhmi4jdf1#

首先不要将其设置为None

if kernel is not None:
    weight_func = kernel
else:
    # construct default fallback weight_func

相关问题