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

问题描述 投票:0回答:1

让我们假设我想创建一个函数,将列表的每个元素乘以2.一旦创建了这个函数,我想通过验证[1, 2]成为[2, 4]来检查一切是否正常。如果我的函数创建了一个新列表,我可以通过以下方式执行此操作:

def double(l):
    new_l = []
    for j in l:
        new_l.append(j * 2)
    return new_l

assert double([1, 2]) == [2, 4]

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

def double(l):
    for i, j in enumerate(l):
        l[i] = j * 2

我可以

l = [1, 2]
double(l)
assert l == [2, 4]

我发现这个解决方案不是很优雅。有没有办法在一个班轮中做到这一点,或者更好的方法来做到这一点?

python
1个回答
5
投票

没有办法做到这一点。如果函数修改了某些内容而没有返回它,那么你所做的就是唯一的选择。

您可以在第二个函数中修改它并返回它(也就是说,在最后一行添加return l)。然而,这是误导,因为当有人写y = f(x)他不期望x改变。一般来说,函数应该做某事,或者返回一些东西,而不是两者。

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

© www.soinside.com 2019 - 2024. All rights reserved.