def buggy_reverse(input):
m = input
m.reverse()
return m
def test_buggy_reverse():
assert [3,2,1] == buggy_reverse([1,2,3])
assert [] == buggy_reverse([])
input = ["a", "b", "c"]
assert ["c", "b", "a"] == buggy_reverse(input)
assert ["a", "b", "c"] == input
我已经给m分配了输入,并反转了m。但在反转的过程中,m输入也在反转。有人能解释一下原因吗。你知道吗
试试这个(但请看下面猜测的更好、更通用的版本):
在我的python2.7.11上,它没有产生好的输出。我更改了一些名称只是为了更改,我不建议真正命名函数
ex_buggy_reverse
;-)代码中有几个问题:
不要为关键字(或内置变量或标准模块中经常使用的函数,如果可能的话)的变量使用名称,因为这几乎总是在您至少需要它的时候咬到您。
input
是这里的意思。反向不复制,所以为什么要在函数中执行它。你最好写在下面这张单子上。
尝试与PEP8兼容(这里是list literal中逗号后面的空格)。
重写
reverse_proxy
函数的示例(替换buggy_reverse(...)
):从python文档中的reversed():“返回一个反向迭代器。seq必须是一个对象,该对象具有反向的()方法或支持序列协议(从0开始的整数参数的len()方法和getitem()方法)。”
因此,如果您想将iterable转换为一个列表,我建议您在名称中说明这个目的,并且请记住,在本地定义的对象上调用reverse方法(将列表中的元素反转到位)并返回该对象/引用(而不是eg)看起来很笨拙
这里有一个带焦点的问题/答案页面:How can I reverse a list in python?。你知道吗
下面是承诺的猜测增强版和扩展版:
快乐的黑客!你知道吗
相关问题 更多 >
编程相关推荐