簡體   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