首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回None,尽管值不是None

函数返回None,尽管值不是None
EN

Stack Overflow用户
提问于 2017-12-31 21:55:15
回答 2查看 109关注 0票数 0

我正在用Python编写一个lokta volterra算法。

我得到了以下错误

代码语言:javascript
复制
File "abeille.py", line 73, in affichage_Lotka_Volterra_TL
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)

TypeError: 'NoneType' object is not iterable

下面是代码

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt



a,b,c,d=1.5,0.05,0.48,0.05

'''a=taux de reproduction des proies (constant, indépendant du nombre de prédateurs)

b=taux de mortalité des proies dû aux prédateurs rencontrés

c=taux de mortalité des prédateurs (constant, indépendant du nombre de proies)

d=taux de reproduction des prédateurs en fonction des proies rencontrées et mangées'''



def lapin(l,y):
    return
    a*l-b*l*y



def lynx(l,y):
    return
    d*l*y-c*y



def Lotka_Volterra(l_0,y_0,tmin,tmax,h):
    liste_t=[0]    
    liste_l=[l_0]
    liste_y=[y_0]
    t=tmin
    dy=y_0
    dl=l_0
    while    t<=tmax:
        t+=h
        liste_t.append(t)
        dl+=(a*dl-b*dl*dy)*h
        dy+=(d*dl*dy-c*dy)*h
        liste_l.append(dl)
        liste_y.append(dy)
    return
    liste_t,liste_l,liste_y




def affichage_Lotka_Volterra_TL(l_0,y_0,tmin,tmax,h):
'''Population de lièvres en fonction du temps'''
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)
    plt.plot(T,L)
    plt.title('Population de lièvres au cours du temps\nConditions initiales : 4 kilolièvres pour 10 lynx sur une durée de 50 ans')
    plt.xlabel('Temps d-étude (en année)')
    plt.ylabel('L = Population de lièvres (en kilo)')
    plt.show()
affichage_Lotka_Volterra_TL(4,10,0,50,0.0005)



def affichage_Lotka_Volterra_TY(l_0,y_0,tmin,tmax,h):
    '''Population de lynx en fonction du temps'''
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)
    plt.plot(T,Y)
    plt.title('Population de lynx au cours du temps\nConditions initiales : 4 kilolièvres pour 10 lynx sur une durée de 50 ans')
    plt.xlabel('T = Temps d-étude (en année)')
    plt.ylabel('Y = Population de lynx (en unité)')
    plt.show()


def affichage_Lotka_Volterra_YL(l_0,y_0,tmin,tmax,h):
    '''Population de lynx en fonction de la population de lièvres'''
    T,L,Y=Lotka_Volterra(l_0-2,y_0-2,tmin,tmax,h)
    plt.plot(L,Y, label="L0=2 et Y0=8")
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)
    plt.plot(L,Y, label="L0=4 et Y0=10")
    T,L,Y=Lotka_Volterra(l_0+2,y_0+2,tmin,tmax,h)
    plt.plot(L,Y, label="L0=6 et Y0=12")
    T,L,Y=Lotka_Volterra(l_0+10,y_0+10,tmin,tmax,h)
    plt.plot(L,Y, label="L0=14 et Y0=20")
    T,L,Y=Lotka_Volterra(l_0+50,y_0+50,tmin,tmax,h)
    plt.plot(L,Y, label="L0=54 et Y0=60")
    T,L,Y=Lotka_Volterra(l_0+20,y_0+100,tmin,tmax,h)
    plt.plot(L,Y, label="L0=24 et Y0=110")
    T,L,Y=Lotka_Volterra(l_0+60,y_0+100,tmin,tmax,h)
    plt.plot(L,Y, label="L0=64 et Y0=110")
    T,L,Y=Lotka_Volterra(l_0+100,y_0+100,tmin,tmax,h)
    plt.plot(L,Y, label="L0=104 et Y0=108")
    plt.title('Population de lynx en fonction de la population de lièvres\nConditions initiales : L0 kilolièvres pour Y0 lynx sur une durée de 50 ans et des relevés tous les 0.0005 ans')
    plt.xlabel('L = Population de lièvres (en kilo)')
    plt.ylabel('Y = Population de lynx (en unité)')
    plt.legend(loc="upper right")#localisation de l'affichage de la légende sur le graphique
    plt.show()
affichage_Lotka_Volterra_YL(4,10,0,50,0.0005)
EN

回答 2

Stack Overflow用户

发布于 2017-12-31 21:59:04

你不能这样拆分你的return行。

代码语言:javascript
复制
return # Implicitly returns None

# Then you have a pure expression
#  in an impure context after the return
liste_t,liste_l,liste_y

下一行上的3个逗号分隔的值不是return的一部分。

将这些行更改为

代码语言:javascript
复制
return liste_t,liste_l,liste_y
票数 2
EN

Stack Overflow用户

发布于 2017-12-31 22:12:28

您将返回None,因此,您将获得None

代码语言:javascript
复制
return

等同于

代码语言:javascript
复制
return None

return语句后面的代码是无法访问的代码。

您可能需要:

代码语言:javascript
复制
return liste_t,liste_l,liste_y
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48043033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档