作家
登录

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

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

  • class A(object): 
  •     pass 
  • python docoment 给出了标准的解决办法:

    1. >>> def report(when=None): 
    2. ...  if when is None: 
    3. ...  when = time.time() 
    4. ... return when 
    5. ... 
    6. >>> report() 
    7. 1500113446.746997 
    8. >>> report() 
    9. 1500113448.552873 

    第二: x += y vs x = x + y

    一般来说,二者是等价的,至少看起来是等价的(这也是陷阱的定义 — 看起来都OK,但不必定精确)。

    1. >>> x=1;x += 1;print x 
    2. 2  
    3. >>> x=1;x = x+1;print x 
    4. >>> x=[1];x+=[2];print x 
    5. [1, 2] 
    6. >>> x=[1];x=x+[2];print x 
    7. [1, 2] 

    呃,被光速打脸了?

    前者x指向一个新的对象,后者x在本来的对象是修改,当然,那种效不雅是精确的取决于应用处景。至少,得知道,二者有时刻并不一样

    1. A way around this is to use None as the defaultand explicitly test for it in the body of the function  

    第三,神奇的小括号–()

    小括号(parenthese)在各类编程说话中都有广泛的应用,python中,小括号还能表示元组(tuple)这一数据类型, 元组是immutable的序列。

    1. >>> a = (1, 2) 
    2. >>> type(a) 
    3. <type 'tuple'
    4. >>> type(()) 
    5. <type 'tuple'

    但如不雅只有一个元素呢

    1. >>> a=(1) 
    2.  
    3. >>> type(a) 
    4.  
    5. <type 'int'

    神奇不神奇,如不雅要表示只有一个元素的元组,精确的姿势是:

    1. >>> a=(1,) 
    2.  
    3. >>> type(a) 
    4.  
    5. <type 'tuple'

    第四:生成一个元素是列表的列表

    这个有点像二维数组,当然生成一个元素是字典的列表也是可以的,更通俗的说,生成一个元素是可变对象的序列

    很简单嘛:

    1. >>> a= [[]] * 10 
    2.  
    3. >>> a 
    4.  
    5. [[], [], [], [], [], [], [], [], [], []] 
    6.  
    7. >>> a[0].append(10) 
    8.  
    9. >>> a[0] 
    10.  
    11. [10] 

    看起来很不错,简单清楚明了,but


      推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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