首页 > 解决方案 > 为什么函数不返回值而是打印相同的值?

问题描述

看到这个功能: -

def beej(v):
    v = sum(map(int, list(str(v))))
    if len(str(v)) <=1:
        print("printed: {}".format(v))  
        return v
    beej(v)

#outputs
>>> beej(23)
printed: 5
5                # returned
>>> beej(4221)
printed: 9
9                # returned
>>> beej(422199)
printed: 9       #no returned value
>>> beej(999)
printed: 9       #no returned value

所以; 它只是为某些值工作;而不是为了别人。我想知道这背后的原因;以及如何找到这些隐藏的错误。

标签: pythonpython-3.xfunctionreturn

解决方案


您在递归调用中缺少 return 语句:

def beej(v):
    v = sum(map(int, list(str(v))))
    if len(str(v)) <= 1:
        print("printed: {}".format(v))  
        return v
    return beej(v)

v只有当第一次调用beej(即没有递归调用)产生一位数的总和时,您当前的代码才会返回。


推荐阅读