Python函数首先填充一个参数,然后填写其余参数

时间:2018-04-22 16:01:28

标签: python

我想: 传递一个函数,使其首先接收一个参数,然后再接收另一个参数。 以下是详细信息:

def SuLQ(g, S, d):
    sigma = 0
    for i in S:
        sigma += g(d[i])
    if sigma <= len(S) and sigma >= 0:#required for DP
        return sigma + np.random.normal(loc = 0.0,scale = R)
    else:
        return 0


def sa_dir(wj, di):
    if np.dot(wj, di) <= 0:
        return 1
    else:
        return 0

whole_set = [i for i in xrange(48843)]#[n]

two_d_array, targ = predict_on_b()
w0 = [ 0,  0,  0,  0,  0,  0,  -1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,
-1,  0,  0,  -1,  0,  0,  0,  -1,  0,  0,  1,  0,  0,  -1,  0,  0,  0,  0,
0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  -1,
0,  0,  0,  0,  0,  0]

num_mis_vecs = SuLQ(sa_dir(wj = w0,), whole_set, two_d_array)

在行中:

num_mis_vecs = SuLQ(sa_dir(wj = w0,), whole_set, two_d_array)

我将函数sa_dir作为参数传递给SuLQ,同时给sa_dir一个参数wj(方向向量)。

sa_dir的另一个参数在函数中给出(其中g是sa_dir(wj,di)的另一个名称,参数wj已经修复)

SuLQ(g, S, d)

执行时

sigma += g(d[i])

但似乎python不允许这样做。这是我得到的错误。

TypeError: sa_dir() takes exactly 2 arguments (1 given)

我不想将wj硬编码到sa_dir中,因为我想稍后更改wj。 有人有建议吗?提前谢谢。

(万一你感兴趣,我正在使用python重新实现一个论文的框架。) (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.126.209&rep=rep1&type=pdf

1 个答案:

答案 0 :(得分:0)

你的答案是undefined method `to_key' for #<ActiveRecord::Relation []> Did you mean? to_set to_ary 函数,它接受一个函数和部分参数,然后在所有添加的参数后应用它们:

functools.partial