Python中的矛盾输出

时间:2016-12-26 22:22:22

标签: python

我在python中编写了这个小程序,以显示十进制整数作为其数字的排序列表:

import math 
import sys
import os

l = []

def f(n):
    if (math.floor(n/ 10) == 0):
        l.append(n)
        return l
    else:
        l.append(n%10)
        return f(int((n - (n%10))/10))

def g(n):
    return sorted(f(n))

print( g(1) )
print ([1] == [1])
print (g(1) == g(1))

似乎在运行它时,它应该回答[1], True, True 当我运行它时,它给了我看似矛盾的答案[1], True, False。为什么会这样?

2 个答案:

答案 0 :(得分:10)

您正在更改全局l,然后返回已排序的副本。 l不断增长:

>>> g(1)
[1]
>>> l
[1]
>>> g(1)
[1, 1]
>>> l
[1, 1]
>>> g(1)
[1, 1, 1]
>>> l
[1, 1, 1]

[1, 1]不等于[1, 1, 1]

如果您想在每次拨打g()时生成单个元素列表,请不要使用全局列表。

答案 1 :(得分:1)

print(g(1))
print(g(1))
print(g(1))

输出:

[1]
[1, 1]
[1, 1, 1]

因为您使用的是单个全局列表l,每次运行f时都会更改,并且不会重置。