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]))
而输出[1]只是我应该得到的地方[1,4,9].
我究竟做错了什么?
Hug*_*ell 18
为什么不完全支持这个问题呢?
def square(vals):
    return [v*v for v in vals]
编辑:正如几位人士指出的那样,第一个问题是你的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]
因为您将可变项(列表)作为默认项传递,所以进一步使用该默认项指向同一原始列表.
相反,试试吧
def square(vals, result=None):
    if result is None:
        result = []
    result.extend(v*v for v in vals)
    return result
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]))
产量
[1.0, 4.0, 9.0]
我们甚至用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]