作家
登录

程序员老司机都要错的Python陷阱与缺陷列表

作者: 来源: 2017-10-12 11:04:09 阅读 我要评论

... 

第七,定义__del__

大年夜多半计算机专业的同窗可能都是先学的C、C++,构造、析构函数的概念应当都异常熟。于是,当切换到python的时刻,天然也想知道有没有响应的函数。比如,在C++中异常有名的RAII,即经由过程构造、析构来治理资本(如内存、文件描述符)的声明周期。那在python中要达到同样的效不雅怎么做呢,即须要找到一个对象在烧毁的时刻必定会调用的函数,于是发清楚明了__init__, __del__函数,可能简单写了两个例子发明白实也能工作。但事实上可能掉落进了一个陷阱,在python documnet是有描述的:

  1. 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代码如下:

main.py代码如下:

  1. def add(x): 
  2.     from mypackage import mymodule 
  3.     mymodule.l.append(x) 
  4.     print "updated list",mymodule.l, id(mymodule) 
  5.   
  6. def get(): 
  7.     import mymodule 
  8.     print 'module in get', id(mymodule) 
  9.     return mymodule.l 
  10.   
  11. if __name__ == '__main__'
  12.     import sys 
  13.     sys.path.append('../'
  14.     add(1) 
  15.      
  16.     ret = get() 
  17.     print "lets check", ret 

map()、filter()、 dict.items()在python2.7返回列表,而在3.x中返回迭代器。当然迭代器大年夜多半都是比较好的选择,加倍pythonic,然则也出缺点,就是只能遍历一次。在instagram的分享中,也提到因为这个导致的一个坑爹的bug。

运行python main.py,结不雅如下:

  1. updated list [1] 4406700752 
  2. module in get 4406700920 
  3. 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对象。

第十,gil

  1. >>> import time 
  2. >>> def report(when=time

      推荐阅读

      从开发到部署会用到的 Docker 命令

    本文的目标是懂得容器开辟在目标情况中安排的端到端流程,并列出这些操作所需的 Docker 敕令。1. 介绍全部流程包含应用代码、依附软件和设备来开辟容器映像,在开辟情况中运行和测试容器,将容器映像宣>>>详细阅读


    本文标题:程序员老司机都要错的Python陷阱与缺陷列表

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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