繁体   English   中英

如何让我的 function 在我的 for 循环中返回多个值? (初学者)

[英]how do i make my function returns multiple values within my for-loop? (Beginner)

在求解系数p1p2p3后,我制作了一个 function ,它使用np.roots()来计算三次 function 的根。 我试图让它返回多个根。

这是我的代码:

def Q():
     .
     .
     .
    coeff = [1,p1, p2, p3]
    roots = np.roots(coeff)

    #prints out the real positive root

    for i in range(0, len(roots)):
        if np.isreal(roots[i]):
            return np.real(roots[i])
                 
    return 

root = Q(T1,P1,Tc,Pc)
print(root)

output:

root 1

我想要的是:

root 1
root 2
.
.
.
root n

您不能在循环中准确地返回值: return停止执行 function 并将控制权返回给调用者。 您必须预先计算要返回的所有内容,然后一次全部返回。

在这种情况下,您可以使用掩码从数组中 select 元素。 这特别容易,因为np.isreal是矢量化的:它旨在一次对整个数组进行操作,而不仅仅是单个元素。 所以你可以摆脱整个循环并编写

return roots[np.isreal(roots)]

yield关键字是return的替代方法,它确实允许您返回多个值。 使用yield将您的 function 变成一个生成器,您可以对其进行迭代,直到它停止产生值。 要制作生成器,只需在循环中将return替换为yield即可。

function 的两个版本都将返回一个可迭代的而不是单个值。 然后,您可以循环打印或一次全部打印。 循环如下所示:

for root in Q():
    print(root)

要一次打印所有内容,您可以使用换行符连接字符串:

print('\n'.join(str(root) for root in Q()))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM