在函数中传递列表作为参数时,为什么以下列表没有更改?
def foo(*x):
y=sorted(x)
print(y)
a=[3,2,1]
该函数返回[[3, 2, 1]]
,而不是[[1,2,3]]
。为什么会这样?这与按值调用有关吗?
答案 0 :(得分:1)
因为你的函数的参数被指定为* a,这就像说你的参数是一个未定义维度的元组
当您尝试使用嵌套列表对元组进行排序时,该值不会更改
因此你得到了一份清单(你[[3,2,1]]没有[3,2,1])
如果您尝试这样做,它将起作用
def foo(*x):
y=sorted(x[0])
print(y)
答案 1 :(得分:1)
为什么要创建另一个功能? 你可以这样做
>>> a = [3,2,1]
>>> sorted(a)
[1, 2, 3]
但是如果你想创建另一个功能。你必须打电话给它。
def foo(x):
y=sorted(x)
return y
a = [3,2,1]
print(foo(a))
答案 2 :(得分:1)
正如Blue Monday所说,没有必要为此创建一个新函数,你应该只调用[15, 5]
函数。但是,以下是修复代码的其他几种方法。
sorted
<强>输出强>
a = [3, 2, 1]
def foo1(*x):
y = sorted(*x)
print(x, y)
return y
print(foo1(a))
def foo2(*x):
y = sorted(x)
print(x, y)
return y
print(foo2(*a))
print(foo2(5, 4, 7, 6))
请注意,([3, 2, 1],) [1, 2, 3]
[1, 2, 3]
(3, 2, 1) [1, 2, 3]
[1, 2, 3]
(5, 4, 7, 6) [4, 5, 6, 7]
[4, 5, 6, 7]
希望我们传入项目以作为单独的参数进行排序。我们可以使用foo2
&#34; splat&#34;来传递列表(或元组)。函数调用中的运算符。请参阅官方Python教程中的Unpacking Argument Lists。