Python 如何使函数在for循环中返回多个值?(初学者)

Python 如何使函数在for循环中返回多个值?(初学者),python,numpy,jupyter-notebook,Python,Numpy,Jupyter Notebook,我做了一个函数,在我解出系数p1、p2和p3后,使用np.roots()来计算三次函数的根。我试图让它返回多个根 这是我的密码: 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(roo

我做了一个函数,在我解出系数
p1
p2
p3
后,使用
np.roots()
来计算三次函数的根。我试图让它返回多个根

这是我的密码:

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)
输出:

root 1
我想要的是:

root 1
root 2
.
.
.
root n

不能在循环中精确返回值:
return
停止函数的执行并将控制权返回给调用方。你必须预先计算所有你想要返回的东西,然后一次返回所有的东西

在这种情况下,可以使用遮罩从数组中选择元素。这尤其容易,因为它是矢量化的:它意味着一次操作整个数组,而不仅仅是单个元素。这样就可以去掉整个循环并编写

return roots[np.isreal(roots)]
yield
关键字是
return
的替代选项,它允许您返回多个值。使用
yield
将函数转换为生成器,您可以对其进行迭代,直到它停止生成值。要制作生成器,只需将循环中的
return
替换为
yield

函数的两个版本都将返回一个iterable而不是单个值。然后可以循环打印,也可以一次全部打印。循环如下所示:

for root in Q():
    print(root)
要一次打印所有内容,可以使用换行符连接字符串:

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