作家
登录

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

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

  •  
  • >>> a[0] 
  •  
  • [10] 
  • 看起来很不错,简单清楚明了,but

    1. >>> a[1] 
    2.  
    3. [10] 
    4.  
    5. >>> a 
    6.  
    7. [[10], [10], [10], [10], [10], [10], [10], [10], [10], [10]]  

    我猜,这应当不是你预期的结不雅吧,究其原因,照样因为python中list是可变对象,上述的写法大年夜家都指向的同一个可变对象,精确的姿势

    第十,gil

    1. >>> a = [[] for _ in xrange(10)] 
    2.  
    3. >>> a[0].append(10) 
    4.  
    5. >>> a 
    6.  
    7. [[10], [], [], [], [], [], [], [], [], []]  

    第五,在拜访列表的时刻,修改列表

    列表(list)在python中应用异常广泛,当然经常会在拜访列表的时刻增长或者删除一些元素。比如,下面这个函数,试图删掉落列表中为3的倍数的元素:

    1. >>> def modify_lst(lst): 
    2.  
    3. ... for idx, elem in enumerate(lst): 
    4.  
    5. ... if elem % 3 == 0: 
    6.  
    7. ... del lst[idx]  

    测试一下,

    1. >>> lst = [1,2,3,4,5,6] 
    2.  
    3. >>> modify_lst(lst) 
    4.  
    5. >>> lst 
    6.  
    7. [1, 2, 4, 5]  

    似乎没什么错,不过这只是命运运限好

    1. >>> def report(when=None): 
    2.  
    3. ...  if when is None: 
    4.  
    5. ...  when = time.time() 
    6.  
    7. ... return when 
    8.  
    9. ... 
    10.  
    11. >>> report() 
    12.  
    13. 1500113446.746997 
    14.  
    15. >>> report() 
    16.  
    17. 1500113448.552873  

    那么Python中哪些真正算得上陷阱呢?

    1. >>> lst = [1,2,3,6,5,4] 
    2.  
    3. >>> modify_lst(lst) 
    4.  
    5. >>> lst 
    6.  
    7. [1, 2, 6, 5, 4]  

    膳绫擎的例子中,6这个元素就没有被删除。如不雅在modify_lst函数中print idx, item就可以发明端倪:lst在变短,但idx是递增的,所以在膳绫擎掉足的例子中,当3被删除之后,6变成了lst的第2个元素(大年夜0开端)。在C++中,如不雅遍历容器的时刻用迭代器删除元素,也会有同样的问题。

    如不雅逻辑比较简单,应用list comprehension是不错的留意

    大年夜运行结不雅可以看到,在add 和 get函数中import的mymodule不是同一个module,ID不合。当然,在python2.7.10中,须要main.py的第13行才能出现如许的效不雅。你可能会问,谁会写出第13行如许的代码呢?事实上,在很多项目中,为了import的时刻便利,会往sys.path参加一堆路径。那么在项目中,大年夜家赞成一种import方法就异常有须要了


      推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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