while循环在返回期间执行一次,在print [python]

时间:2015-11-27 00:46:54

标签: python printing while-loop return

我有两个我正在使用的功能。我正在尝试制作一个分叉图。我的第一个功能是使用matplotlib制作地图。

def print_bifurcation_map(initial,rmin,rmax,rstep,iterates,k):
    xn_list = []
    r_list = []

    for r in np.linspace(rmin, rmax,rstep):
        xn = []
        xn.append(run_logistic(initial,r,iterates))
        xn_list =xn_list + xn[-k:]


        r_list = r_list + [r]*len(xn)

此代码执行的操作是获取一系列R并计算限制,因为x接近大数(迭代)。我们从列表中取出最后的k个数字。它调用一个函数run_logistic,它位于下面。

def run_logistic(xn,r,iterates):
    iteration = 1
    while iteration <= iterates:
        xn1 = logistic_map(xn,r)
        iteration = iteration + 1
        xn = xn1
        print xn

这是事情变得有点奇怪的地方。当我使用return并通过函数'print_bifurcation_map'调用时,它运行一次并追加一次。但是,如果我将返回xn更改为'print xn',这就是代码块中的内容,它似乎运行得更准确,尽管速度非常慢。

那么我在print_bifurcation_map定义或run_logistic函数中做错了什么。下面是logistic_map函数。

def logistic_map(xn,r):
    xn1 = r*xn*(1-xn)
    return xn1

1 个答案:

答案 0 :(得分:1)

return返回该点的函数并输出返回的值。因此,在第一次迭代之后,您的值将被返回,然后就完成了。

你想用函数run_logistic做什么来返回最终值或获得的所有值?

如果你想要最终值,那么 -

def run_logistic(xn,r,iterates):
    iteration = 1
    while iteration <= iterates:
        xn1 = logistic_map(xn,r)
        iteration = iteration + 1
        xn = xn1
    return xn # Put return outside while-loop to get final value

否则,如果您想要所有值,则创建一个列表以追加并返回该列表

def run_logistic(xn,r,iterates):
    iteration = 1
    xn_list = []
    while iteration <= iterates:
        xn1 = logistic_map(xn,r)
        iteration = iteration + 1
        xn = xn1
        xn_list.append(xn)
    return xn_list # Put return outside while-loop to get full list of values