
我小我对陷阱的定义是如许的:代码看起来可以工作,但不是以你“想当然“”的方法。如不雅一段代码直接掉足,抛出了异常,我不认为这是陷阱。比如,Python法度榜样员应当都碰到过的“UnboundLocalError”, 示例:
以GIL结尾,因为gil是Python中大年夜家公认的缺点!
- >>> a=1
- >>> def func():
- ... a+=1
- ... print a
- ...
- >>> func()
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "<stdin>", line 2, in func
- UnboundLocalError: local variable 'a' referenced before assignment
对于“UnboundLocalError”,还有更高等的版本:
- import random
- def func(ok):
- if ok:
- a = random.random()
- else:
- import random
- a = random.randint(1, 10)
- return a
- func(True)# UnboundLocalError: local variable 'random' referenced before assignment
可能对于很多python新手来说,这个Error让人摸不着脑筋。但我认为这不算陷阱,因为这段代码必定会报错,而不是默默的以缺点的方法运行。不怕真小人,就怕伪正人。我认为缺点就比如伪正人。
第一:以mutable对象作为默认参数
这个估计是最广为人知的了,Python和其他很多说话一样,供给了默认参数,默认参数确切是个好器械,可以让函数调用者忽视一些细节(比如GUI编程,Tkinter,QT),对于lambda表达式也异常有效。然则如不雅应用了可变对象作为默认参数,那么工作就不那么竽暌逛快了。
惊喜不惊喜?!究其原因,python一一切都是对象,函数也不列外,默认参数只是函数的一个属性。而默认参数在函数定义的时刻已经求值了。
Default parameter values are evaluated when the function definition is executed.
Circular references which are garbage are detected when the option cycle detector is enabled (it’s>
- >>> import time
- >>> def report(when
推荐阅读
跟着物联网设备的赓续出现,用户所碰到的严重的物联网安然问题不容忽视。分析师和专家经常评论辩论这个严重问题,人们须要采取积极主动的行动来竽暌功对和解决。根据调研机构Gartner公司的>>>详细阅读
本文标题:程序员必知的Python陷阱与缺陷列表
地址:http://www.17bianji.com/lsqh/36531.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示