繁体   English   中英

关于在python中迭代函数的问题

[英]Question about iterating a function in python

我使用python创建了这个函数

import numpy as np
p1=1/2


def qud(x,p):
    x_sqr = x**2
    x_qud = x**3
    pn=x_sqr*p
    return x_sqr ,x_qud,pn

我需要多次迭代这个函数,通过在前一次迭代中给出pn的值。

我试过没有像这样的for循环,

第一次迭代sqr1, qud1 ,pnew = qud(2,p1)

第二次迭代sqr2, qud2 ,pnew1 = qud(2,pnew)

我使用了从第一次迭代中获得的值pnew

第三次迭代sqr3, qud3 ,pnew2 = qud(2,pnew1)等等。

现在我想修改我的代码,以便在给出迭代次数时使用for循环存储值。但是我的代码没有用。

我的代码如下,

i=4
sqr = np.zeros(i)
qud = np.zeros(i)
p1 = np.zeros(i)
sqr[0],qud[0],p1[0] = qud(2,p1)

for j in range (1,3) :
    sqr[j],qud[j],p1[j] = qud(2,p1[j-1])

可以任何人提出任何建议,以便这有效吗?

谢谢

这样做的pythonic方法是创建一个生成器。 生成器将保持状态,您可以调用next()或使用许多python itertools ,maps,filters等中的任何一个。这是获取前四个值的一种方法:

from itertools import islice

def qud(x,p):
    x_sqr = x**2
    x_qud = x**3
    while True:
        p = x_sqr*p                        # update p
        yield x_sqr ,x_qud,p               # yield instead of return

my_iterator = qud(2,1/2)                   # create an iterator based on itial values

for values in islice(my_iterator, 0, 4):   # loop over an islice 
    print(values)

只要您继续迭代它,这将继续产生值。

暂无
暂无

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

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