我有一个返回元组的函数:
def gradiant(params, data):
Q1 = params[0]
Q2 = params[1]
dQ1 = sum(2*(y_i - Q1*x_i - Q2)*(x_i) for x_i, y_i in data)
dQ2 = sum(-2*(y-i - Q1*x_i - Q2) for x_i, y_i in data)
return (dQ1, dQ2)
我正在尝试打印返回值:
^{pr2}$输出:
<generator object <genexpr> at 0x7fdfe009adc0>
<generator object <genexpr> at 0x7fdfe009a5f0>
如何打印整数值?在
您有一个
y-i
,而不是y_i
。它为我产生了一个NameError
。我修复了打字错误,它工作得很好(我想,无论如何,它打印了两个数字)。在然而,更有趣的问题是如何在生成器表达式中处理错误(因为输入错误是发送到
sum()
的生成器表达式的一部分)。我得到了一个NameError
,但是你得到了生成器表达式对象。请看这个函数调用,它应该包含一个TypeError
:现在让我们看看通过打印实际对象可以得到什么:
^{pr2}$这在一定程度上是有道理的,因为生成器是懒洋洋地评估的,而且它从未真正被调用过。但是让我们看看当我们将它发送到
list()
时会发生什么,这应该会强制求值:这是预期的错误。在
一个包含无效生成器的有效生成器如何?在
同样的无信息的错误。在
如果我们使用
list
理解而不是生成器表达式呢?在我们得到了预期的信息错误。在
不幸的是,我不知道为什么会发生这种情况,但是要特别小心生成器表达式。在
相关问题 更多 >
编程相关推荐