作家
登录

程序员必知的Python陷阱与缺陷列表

作者: 来源: 2017-08-04 05:40:07 阅读 我要评论

法度榜样员必知的Python陷阱与缺点列表

我小我对陷阱的定义是如许的:代码看起来可以工作,但不是以你“想当然“”的方法。如不雅一段代码直接掉足,抛出了异常,我不认为这是陷阱。比如,Python法度榜样员应当都碰到过的“UnboundLocalError”, 示例:

以GIL结尾,因为gil是Python中大年夜家公认的缺点!

  1. >>> a=1 
  2.  
  3. >>> def func(): 
  4.  
  5. ...     a+=1 
  6.  
  7. ...     print a 
  8.  
  9. ... 
  10.  
  11. >>> func() 
  12.  
  13. Traceback (most recent call last): 
  14.  
  15. File "<stdin>", line 1, in <module> 
  16.  
  17. File "<stdin>", line 2, in func 
  18.  
  19. UnboundLocalError: local variable 'a' referenced before assignment  

对于“UnboundLocalError”,还有更高等的版本:

  1. import random 
  2.  
  3.   
  4.  
  5. def func(ok): 
  6.  
  7.     if ok: 
  8.  
  9.         a = random.random() 
  10.  
  11.     else
  12.  
  13.         import random 
  14.  
  15.         a = random.randint(1, 10) 
  16.  
  17.     return a 
  18.  
  19.   
  20.  
  21. 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>

  • l = [] 
  •  
  • class A(object): 
  •  
  • pass  
    1. >>> import time 
    2.  
    3. >>> def report(when
       1/5    1 2 3 4 5 下一页 尾页

        推荐阅读

        有效促进物联网安全的5大策略

      跟着物联网设备的赓续出现,用户所碰到的严重的物联网安然问题不容忽视。分析师和专家经常评论辩论这个严重问题,人们须要采取积极主动的行动来竽暌功对和解决。根据调研机构Gartner公司的>>>详细阅读


      本文标题:程序员必知的Python陷阱与缺陷列表

      地址:http://www.17bianji.com/lsqh/36531.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)