函数如何在此for循环之外执行?

时间:2019-06-21 20:08:06

标签: python function

为什么此函数在For循环外执行并在迭代步骤完成后停止?

def train():

    w1 = np.random.randn() #random number from normal distribution
    w2 = np.random.randn() #random number from normal distribution
    b = np.random.randn()  #random number from normal distribution
    iterations = 100000    #number of iterations
    learning_rate = 0.02    #learning rate

    for i in range(iterations):

        randpoint = data[np.random.randint(len(data))]
        pred = activation(randpoint[0] * w1 + randpoint[1] * w2 + b)
        cost = (pred - randpoint[2])**2

        dcost_dpoint = 2 * (pred - randpoint[2]) * (der_activation(randpoint[0] * w1 + randpoint[1] * w2 + b))

        w1 = w1 - learning_rate * dcost_dpoint * randpoint[0]
        w2 = w2 - learning_rate * dcost_dpoint * randpoint[1]
        b = b - learning_rate * dcost_dpoint  

    return w1, w2, b

w1, w2, b = train()

2 个答案:

答案 0 :(得分:1)

  

我只是不理解函数外部的调用“ w1,w2,b = train()”。

这将导致执行train()函数。没有函数调用,函数内部的任何代码都将无法执行任何操作。

请注意,train()返回多个值。从技术上讲,它将返回具有三个值的元组。您可以将返回值分配给变量

r = train()

随后,您可以引用元组中的元素:

print(r[0])
print(r[1])
print(r[2])

通常我们要为每个元素命名:

w1 = r[0]
w2 = r[1]
b = r[2]

Python通过直接从函数的返回值进行赋值来为此提供一种简化方式:

w1, w2, b = train()
  

但是当再次调用该函数时,我不知道如何重新启动迭代步骤

为澄清此评论,此函数仅在您发布的整个代码中称为一次,并且在此行上出现。前一个def train(): 定义功能,以便以后可以随时使用。

答案 1 :(得分:1)

指令w1, w2, b = train()说:调用函数train (),该函数应返回值的三元组,并将该三元组中的第一个值分配给w1,将第二个值分配给{{1 }},第三个是w2

函数就是这样工作的:首先定义一个函数,然后在需要时调用它,可能(通常)多次。