【问题标题】:Question about iterating a function in python关于在python中迭代函数的问题
【发布时间】:2019-07-18 01:01:40
【问题描述】:

我使用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])

任何人都可以提出任何建议以使其有效吗?

谢谢

【问题讨论】:

  • 在什么情况下不起作用?它抛出异常了吗?如果是这样,请在此处包括例外情况。只是不正​​确吗?
  • @Craig 那是一个错字。当我也使用索引 j 时,它没有工作

标签: python function for-loop return-value


【解决方案1】:

执行此操作的 Pythonic 方法是创建一个生成器。生成器将保持状态,您可以调用 next() 或使用许多 python itertools、映射、过滤器等中的任何一个。这是获取前四个值的一种方法:

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)

只要你不断迭代它,它就会不断产生价值。

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多