【问题标题】:I have function inside a function that returns "None" [duplicate]我在返回“无”的函数中有函数 [重复]
【发布时间】:2022-08-17 09:38:36
【问题描述】:

以下函数返回None(检查函数),但它打印正确的值。无法理解我做错了什么!

def persistence(n):
    def multipicartion(num,multiTime):
        num = str(num)
        testNum = 1
        multiTime = multiTime 
        for i in num:
            i = int(i)
            testNum = testNum * i
        check(testNum,multiTime)
        
            
    def check(n,multiTime = 0):
        if(len(str(n))== 1):
            print(multiTime)
            return multiTime
        else:
            multiTime = multiTime + 1
            multipicartion(n,multiTime)
     
    print(check(n))
    
    
persistence(39)
  • 您的persistence() 函数没有return。它只是打印并退出。打印后粘贴return(check(n)) 并重新运行。
  • 注意:理想情况下,您不会没有充分的理由嵌套函数

标签: python


【解决方案1】:

您忘记在所有函数中返回一个值 每个函数返回的默认值为 None。

def persistence(n):
    def multipicartion(num, multiTime):
        num = str(num)
        testNum = 1
        multiTime = multiTime
        for i in num:
            i = int(i)
            testNum = testNum * i
        return check(testNum, multiTime)

    def check(n, multiTime=0):
        if (len(str(n)) == 1):
            return multiTime
        else:
            multiTime = multiTime + 1
            return multipicartion(n, multiTime)

    return check(n)  # the row i changed


print(persistence(39))

输出:

3

【讨论】:

  • 谢谢你的回答,帮助很大
  • 您可能应该删除 print(multiTime) 并使用 print(persistence(39))
  • 如果您能将我的评论标记为答案或投票,我将不胜感激:)
  • 谢谢你 OneCricketeer
  • 当我运行您的代码时,我得到None。我认为 3 最初来自 OP 基本案例中的print()
【解决方案2】:

你有一组递归函数。也许你认为在check() 中返回会结束整个递归调用并返回persistence()。这在某些语言中可能是正确的,但不是 Python。您还必须返回每个递归调用的结果以及基本情况。

例如,我编写了一个只使用加法的基本乘法函数。注意所有不同的回报,而不仅仅是当你达到基本情况时。

def mul(x: int, y: int) -> int:
    assert x >= 0 and y >= 0, "does not work with negative numbers"
    assert isinstance(x, int) and isinstance(y, int), "only works with integers"
    return _mul(x, y, running_total=0)

def _mul(x, y, running_total):
    if x == 0:
        # base case
        return running_total 
    else:
        # recursive case
        return _mul(x - 1, y, running_total + y)

您必须确保在 multipicartion()check() 以及 persistence() 中添加返回到您的递归案例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-04
    • 2017-10-08
    • 2020-05-27
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多