Python如何将assert与进行修改的函数一起使用?

Sta*_*ean 0 python

假设我要创建一个将列表的每个元素乘以2的函数。创建该函数后,我想通过验证[1, 2]变为来检查一切正常[2, 4]。如果我的函数创建了一个新列表,则可以通过以下方式进行操作:

def double(l):
    new_l = []
    for j in l:
        new_l.append(j * 2)
    return new_l
Run Code Online (Sandbox Code Playgroud)

assert double([1, 2]) == [2, 4]
Run Code Online (Sandbox Code Playgroud)

现在,如果我的函数将列表修改为:

def double(l):
    for i, j in enumerate(l):
        l[i] = j * 2
Run Code Online (Sandbox Code Playgroud)

我可以

l = [1, 2]
double(l)
assert l == [2, 4]
Run Code Online (Sandbox Code Playgroud)

我发现此解决方案不是很好。有没有一种方法可以做到这一点,还是有更好的方法呢?

blu*_*ote 5

没有办法做到。如果函数修改了某些东西却没有返回它,那么唯一的选择就是您所做的。

可以在第二个函数中修改它并返回它(即return l在最后一行添加)。但是,这具有误导性,因为当有人写东西时,y = f(x)他并不希望x改变。通常,函数应该要么做某件事,要么返回某件事,而不是两者都做

更好的方法是保留您的第一个表格,因为它易于测试且没有副作用。