代码以下:html
这2个例子说明了什么? 字典,集合,列表等等对象是不适合做为函数默认值的. 由于这个默认值实在函数创建的时候就生成了, 每次调用都是用了这个对象的”缓存”. 我在上段时间的分享python高级编程也说到了这个问题,这个是实际开发遇到的问题,好好检查你学过的代码, 也许只是问题没有暴露。
能够这样改,代码以下:python
代码以下:算法
代码以下:编程
这个问题仍是上面说的python高级编程中说过具体缘由. 其实就是当我赋值给my_list的时候,lambda表达式就执行了i会循环,直到 i =4,i会保留缓存
可是能够用生成器,代码以下:闭包
也能够坚持用list,代码以下:app
有点很差懂是吧,在看看python的另一个魔法,代码以下:函数
一个分组的函数,看起来很很差懂,对吧? 咱们来解析下这里oop
代码以下:spa
代码以下:
思考一下,为何 – 是由于你对列表的remove,影响了它的index
代码以下:
代码以下:
代码以下:
代码以下:
代码以下:
看起来都是很简单, 有次序的从底向上,从前向后找,找到就返回. 再看例子:
代码以下:
这也就涉及了MRO(Method Resolution Order):
代码以下:
MRO的算法有点小复杂,既不是深度优先,也不是广度优先
代码以下:
这是一个坑,代码以下:
个人理解是”is”是判断2个对象的身份, ==是判断2个对象的值,代码以下:
咱们在实际开发中均可以向对某列表的对象作修改,可是可能不但愿改动原来的列表. 浅拷贝只拷贝父对象,深拷贝还会拷贝对象的内部的子对象,代码以下:
代码以下:
代码以下:
这里有个不错的解释Python’s += Is Weird, Part II :
代码以下:
代码以下:
原文出处:
https://www.cnblogs.com/Vito2008/p/5018525.html