措施员必知的Python陷阱与缺陷列表分享
因为呈现这个陷阱的时辰常常行使了lambda,以是也许会以为是lambda的题目,但lambda暗示不肯意背这个锅。题目的本质在与python中的属性查找法则,LEGB(local,enclousing,global,bulitin),在上面的例子中,i就是在闭包浸染域(enclousing),而Python的闭包是 迟绑定 , 这意味着闭包顶用到的变量的值,是在内部函数被挪用时查询获得的。 办理步伐也很简朴,那就是变闭包浸染域为局部浸染域。 >>> def create_multipliers(): ... return [lambda x, i = i:i*x for i in range(5)] ... 第七,界说__del__ 大大都计较机专业的同窗也许都是先学的C、C++,结构、析构函数的观念应该都很是熟。于是,当切换到python的时辰,天然也想知道有没有响应的函数。好比,在C++中很是著名的RAII,即通过结构、析构来打点资源(如内存、文件描写符)的声明周期。那在python中要到达同样的结果怎么做呢,即必要找到一个工具在烧毁的时辰必然会挪用的函数,于是发明白__init__, __del__函数,也许简朴写了两个例子发明晰实也能事变。但究竟上也许掉进了一个陷阱,在python documnet是有描写的: Circular references which are garbage are detected when the option cycle detector is enabled (it’s on by default), but can only be cleaned up if there are no Python-level __del__() methods involved. 简朴来说,假如在轮回引用中的工具界说了__del__,那么python gc不能举办接纳,因此,存在内存走漏的风险 第八,差异的姿势import统一个module 示例在stackoverflow的例子上稍作修改,假设此刻有一个package叫mypackage,内里包括三个python文件:mymodule.py, main.py, __init__.py。mymodule.py代码如下: l = [] class A(object): pass main.py代码如下: def add(x): from mypackage import mymodule mymodule.l.append(x) print "updated list",mymodule.l, id(mymodule) def get(): import mymodule print 'module in get', id(mymodule) return mymodule.l if __name__ == '__main__': import sys sys.path.append('../') add(1) ret = get() print "lets check", ret 运行python main.py,功效如下: updated list [1] 4406700752 module in get 4406700920 lets check [] 从运行功效可以看到,在add 和 get函数中import的mymodule不是统一个module,ID差异。虽然,在python2.7.10中,必要main.py的第13行才气呈现这样的结果。你也许会问,谁会写出第13行这样的代码呢?究竟上,在许多项目中,为了import的时辰利便,会往sys.path插手一堆路径。那么在项目中,各人赞成一种import方法就很是有须要了 第九,python进级 python3.x并不向后兼容,以是假如从2.x进级到3.x的时辰得警惕了,下面罗列两点: 在python2.7中,range的返回值是一个列表;而在python3.x中,返回的是一个range工具。 map()、filter()、 dict.items()在python2.7返回列表,而在3.x中返回迭代器。虽然迭代器大大都都是较量好的选择,越发pythonic,可是也有弱点,就是只能遍历一次。在instagram的分享中,也提到由于这个导致的一个坑爹的bug。 第十,gil 以GIL末了,由于gil是Python中各人公认的缺陷! 从其他说话过来的同窗也许看到python用threading模块,拿过来就用,功效发明结果差池啊,然后就会喷,什么鬼。 总结: 毫无疑问的说,python长短常轻易上手,也很是强盛的一门说话。python很是机动,可定制化很强。同时,也存在一些陷阱,搞清晰这些陷阱可以或许更好的把握、行使这么说话。本文罗列了一些python中的一些缺陷,这是一份不完全列表,接待各人增补。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |