为什么这个函数返回None值?

时间:2015-06-30 07:20:27

标签: python function recursion

total=0

def f(x):
    import math
    return 10*math.e**(math.log(0.5)/5.27 * x)

def radio(start,stop,step):
    time=stop-start
    newstart=start+step

if time !=0:
    rad=f(start)*step
    global total
    total+=rad
    radio(newstart,stop,step)
else:
    return total
print radio(0, 5, 1)
print radio(5, 11, 1)
print radio(0, 11, 1)
print radio(40, 100, 1.5)

2 个答案:

答案 0 :(得分:3)

在Python函数中默认返回None

您有缩进问题,因此您的函数radio意外结束,后续代码块被视为独立且不属于radio。要解决它 - 修复这样的缩进:

def radio(start,stop,step):
    time=stop-start
    newstart=start+step

    if time !=0:
        rad=f(start)*step
        global total
        total+=rad
        radio(newstart,stop,step)
    else:
        return total

答案 1 :(得分:0)

如果没有指定返回值,python函数必须给出任何返回值,然后默认返回None

第一次调用无线电功能时,没有返回任何内容,因为返回了无功能

为避免此问题,因为您正在使用递归调用,您将每个函数的返回值转换为其他函数,因此在调用相同函数时使用return

total=0


def f(x):
    import math
    return 10*math.e**(math.log(0.5)/5.27 * x)

def radio(start,stop,step):
    time=stop-start
    newstart=start+step

    if time !=0:
        rad=f(start)*step
        global total
        total+=rad
        return radio(newstart,stop,step)
    else:
        return total
print radio(0, 5, 1)

<强>输出:

39.1031878433