Python中的矛盾输出

Python中的矛盾输出,python,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): ret

我用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],对,错。为什么会发生这种情况?

您正在更改一个全局
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()

时生成单个元素列表,并且要更改全局
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, 1]
[1, 1, 1]
因为您使用的是一个全局列表
l
,它在每次运行
f
时都会更改,并且不会重置

产出:

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

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

Python不起作用,所以类似的事情是可能的。@EliSadoff:术语“功能性”并不是您认为的意思。Python没有,这正是你想说的。@MartijnPieters对不起,我的意思是说Python不是纯粹的功能性的。在纯函数式语言中,
g(1)==g(1)
总是正确的。Python不是函数式的,所以这样的事情是可能的。@EliSadoff:“函数式”一词并不是你认为它的意思。Python没有,这正是你想说的。@MartijnPieters对不起,我的意思是说Python不是纯粹的功能性的。在纯函数式语言中,
g(1)==g(1)
总是正确的。事实上,如果代码是
f(1)==f(1)
,那么它就会工作:-D@6502:是的,因为这样会返回对同一列表的引用,而不是副本。事实上,如果代码是
f(1)==f(1)
它本可以工作:-D@6502:是的,因为这样会返回对同一列表的引用,而不是副本。