python有像C++一样的模板等价方法吗?

rlcwz9us  于 2023-09-29  发布在  Python
关注(0)|答案(2)|浏览(97)

**谁能告诉我我的问题有什么问题?我想我清楚地表达了我的问题,很多人似乎理解了我的问题。

我有一个功能可以应用于多种情况。例如,我有一个函数f包含另一个函数h,它可以根据情况应用不同的函数。

def f(n):
    return n.cost + h(n)

并且h函数将在运行时之前被确定。
我知道我可以只使用f(n, h)来传递不同的函数,但这会扰乱参数列表,我需要它只保留一个参数。
因此,我想知道是否有一种方法可以在Python中实现这样的功能:

def f<h>(n):
    return n.cost + h(n)

在C++中:

template<int (*H)>
int f(Node n)
{
    return n.cost + H(n);
}

谢谢你,谢谢!

wljmcqd8

wljmcqd81#

可以使用装饰器函数

def f_decorator(h):
    def f(n):
        return n.cost + h(n)
    return f

def h(n):
    return n**2

f = f_decorator(h)

print(f(2))
41ik7eoe

41ik7eoe2#

与C不同,C在运行前将函数编译成固定地址的机器码,Python中的所有函数都是在运行时创建的对象,因此在Python中没有“h函数将在 * 运行前被确定(sic)*”这样的事情。
如果h在运行时初始化后不会更改,并且您希望f的调用者使用一个参数调用它,则通常将h作为f的可选参数的默认值更符合Python的要求:

def h(n):
    return n + 1

def f(n, h=h):
    return 2 * n + h(n)

print(f(3))

该输出:102 * 3 + 3 + 1 == 10

相关问题