【问题标题】:how do i make my function returns multiple values within my for-loop? (Beginner)如何让我的函数在我的 for 循环中返回多个值? (初学者)
【发布时间】:2021-06-03 18:08:21
【问题描述】:

在求解系数p1p2p3 后,我创建了一个函数,该函数使用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

【问题讨论】:

    标签: python numpy jupyter-notebook


    【解决方案1】:

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

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

    return roots[np.isreal(roots)]
    

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

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

    for root in Q():
        print(root)
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 2020-03-18
      • 2015-08-08
      • 2016-01-11
      • 2019-06-02
      相关资源
      最近更新 更多