如何在Python中将列表作为函数的输入传递

Arp*_*Das 11 python arrays function list

我正在使用Python,我有一个以列表作为参数的函数.例如,我使用以下语法,

def square(x,result= []):
    for y in x:
        result.append=math.pow(y,2.0)
        return result

print(square([1,2,3]))
Run Code Online (Sandbox Code Playgroud)

而输出[1]只是我应该得到的地方[1,4,9].

我究竟做错了什么?

Hug*_*ell 18

为什么不完全支持这个问题呢?

def square(vals):
    return [v*v for v in vals]
Run Code Online (Sandbox Code Playgroud)

编辑:正如几位人士指出的那样,第一个问题是你的for循环正在短路.你return应该循环后来,而不是在循环中.

下一个问题是你的使用list.append- 你需要调用它,而不是分配给它,即result.append(y*y).result.append = y*y而是使用数值覆盖该方法,可能在您下次尝试调用时抛出错误.

一旦你解决了这个问题,如果你反复调用你的函数,你会发现另一个不太明显的错误:

print(square([1,2,3])     # => [1, 4, 9]
print(square([1,2,3])     # => [1, 4, 9, 1, 4, 9]
Run Code Online (Sandbox Code Playgroud)

因为您将可变项(列表)作为默认项传递,所以进一步使用该默认项指向同一原始列表.

相反,试试吧

def square(vals, result=None):
    if result is None:
        result = []
    result.extend(v*v for v in vals)
    return result
Run Code Online (Sandbox Code Playgroud)

  • 这并没有真正告诉OP他们哪里出错了,而且只是如何对阵列进行排列的一个方法 (2认同)

gtl*_*ert 14

您当前正在for循环的第一次迭代中从函数返回一个值.因此,for循环的第二次和第三次迭代永远不会发生.您需要将return语句移出循环之外,如下所示:

import math

def square(x):
    result = []
    for y in x:
        result.append(math.pow(y,2.0))
    return result 

print(square([1,2,3]))
Run Code Online (Sandbox Code Playgroud)

产量

[1.0, 4.0, 9.0]
Run Code Online (Sandbox Code Playgroud)


Ale*_*der 6

我们甚至用result?您可以使用列表推导来生成您返回的结果.我不确定为什么你result作为变量传递给函数,因为它没有被使用.

此外,return result在循环内部意味着函数返回第一次迭代的值,因此它只返回列表中第一个数字的平方.

import math

def square(x):
    return [math.pow(y, 2) for y in x]

>>> print(square([1,2,3]))
[1.0, 4.0, 9.0]
Run Code Online (Sandbox Code Playgroud)