带参数的函数列表

时间:2016-07-18 07:14:52

标签: python

我需要获取一个函数列表,其函数定义如下:

import theano.tensor as tt

def tilted_loss(y,f,q):
    e = (y-f)
    return q*tt.sum(e)-tt.sum(e[e<0])

我试图做

qs = np.arange(0.05,1,0.05)
q_loss_f = [tilted_loss(q=q) for q in qs]

然而,得到错误TypeError: tilted_loss() missing 2 required positional arguments: 'y' and 'f'。我尝试了更简单的a = tilted_loss(q=0.05),结果相同。

如果需要参数,如何创建此功能列表?关于SO的类似问题考虑了不涉及参数的情况。

2 个答案:

答案 0 :(得分:3)

您可以使用functools.partial

q_loss_f = [functools.partial(tilted_loss, q=q) for q in qs]

答案 1 :(得分:1)

有两种方法可以解决这个问题。两种方式都需要您知道y和f的默认值。

使用当前函数,当你调用tilted_loss(q = 0.05)时,Python解释器根本无法知道y和f的值。 y和f简直是未定义的&amp;未知的。

解决方案(1):添加默认值

我们可以通过添加函数的默认值来解决此问题,例如,如果默认值为:y = 0,f = 1:

def tilted_loss(q, y=0, f=1):
    # original code goes here

请注意,具有默认值的参数必须在非默认参数(即q)之后出现。

解决方案(2):在函数调用期间指定默认值

或者,只需在每次调用该函数时指定默认值。 (解决方案1更好)