[英]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.