首页 > 解决方案 > 中间打印的不同结果

问题描述

我有这个功能

def getDigits (num) :
    check = checkNum(num)
    #print('num: '+str(num))
    if check is False :
        strNum  = str(num)
        numList = map(toInt, strNum)
        #print(list(numList))
        squareList = map(getSquareOfDigits, numList)
        #print(list(squareList))
        sumOfSquares = sum(squareList)
        print('sumSqr: '+str(sumOfSquares))
        getDigits(sumOfSquares)
    else :
        return check

它的结果是:

和平方:4

和平方:16

和平方:37

和平方:58

和平方:89

和平方:9

和平方:81

和平方:65

和平方:61

和平方:37

和平方:58

和平方:89

但是如果我取消注释所有打印,结果是:

[2]
[]
sumSqr: 0
[3]
[]
sumSqr: 0

好的,我知道该list方法会更改结果,但我想知道有一种方法可以在不更改结果的情况下打印对象变量,并且不使用中间变量。

更新

完整的例子在这里

标签: pythonpython-3.x

解决方案


关键是生成numList = map(toInt, strNum)numList一个迭代器。在它被迭代一次之后,它已经耗尽并且将不再包含任何值。该行print(list(numList))通过迭代它、创建一个列表、打印该列表的字符串表示然后丢弃所有内容来完全做到这一点。如果打印行被注释,则返回的迭代器map将生成值;与print原地,numList实际上是空的。

为防止这种情况,请使用numList = list(map(toInt, strNum)); 这样,您就有了一个可以重复使用的持久列表对象。


推荐阅读