中间打印的结果不同

2024-10-03 15:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个功能

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

结果是:

sumSqr:4个

sumSqr:16个

sumSqr:37岁

sumSqr:58岁

sumSqr:89岁

sumSqr:9个

sumSqr:81岁

sumSqr:65岁

sumSqr:61岁

sumSqr:37岁

sumSqr:58岁

sumSqr:89岁

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

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

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

更新

完整示例here


Tags: 方法功能mapdefchecknumlistprint
1条回答
网友
1楼 · 发布于 2024-10-03 15:21:38

关键是numList = map(toInt, strNum)使numList成为iterator。在它被迭代一次之后,它将被耗尽并且不再包含任何值。行print(list(numList))就是这样做的,它在上面迭代,创建一个列表,打印该列表的字符串表示,然后丢弃所有内容。如果打印行被注释,则map返回的迭代器将生成值;当print就位时,numList实际上是空的

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

相关问题 更多 >