Python对象的一些特性
关于Python对象的一些特性
背景
今天的《Python程序设计》课程教了生成器、递归函数。接着布置了一道题目,要求设计一个函数输出杨辉三角。
一位同学把他的代码发给我,告诉我这个代码有问题,希望我帮他看看。
代码与分析
1 | def yanghui(): |
1 | [[1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1], |
看到bug所在了吗,我个人认为,生成器yanghui每次输出的返回值其实是同一个lst,接着因为每次操作都是原地操作,所以最后输出的lst也是同一个lst,即最后的那个lst。
以下是简单描述该原理的C代码
1 | int* lst |
在这种情况下,YH这个数组下存放的其实是同一个指针lst。
解决方案
解决的办法很简单,有两种,第一种是用yield lst.copy(),第二种是让lst = ....,而非原地操作。
参考解
参考解1:同学的解决方案
1 | def yanghui(): |
参考解2:我的解决方案
1 | def fact(n): |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 岚椿桦's Blog!
评论