• 盘点 Python 中的那些冷知识(一)


    小明在日常Code中遇到一些好玩,冷门的事情,通常都会记录下来。

    现在已经积攒了一些了,最近打算整理一波,发出来给大家补补。一篇只分享五个,有时间了就整理。不想错过的,千万记得关注一下。

    1. 省略号也是对象

    ... 这是省略号,在Python中,一切皆对象。它也不例外。

    在 Python 中,它叫做 Ellipsis 。

    在 Python 3 中你可以直接写…来得到这玩意。

    >>> ...
    Ellipsis
    >>> type(...)
    <class 'ellipsis'>

    而在 2 中没有…这个语法,只能直接写Ellipsis来获取。

    >>> Ellipsis
    Ellipsis
    >>> type(Ellipsis)
    <type 'ellipsis'>
    >>>

    它转为布尔值时为真

    >>> bool(...)
    True

    最后,这东西是一个单例。

    >>> id(...)
    4362672336
    >>> id(...)
    4362672336

    这东西有啥用呢?据说它是Numpy的语法糖,不玩 Numpy 的人,可以说是没啥用的。

    在网上只看到这个 用 ... 代替 pass ,稍微有点用,但又不是必须使用的。

    try:
        1/0
    except ZeroDivisionError:
        ...

    2. 类首字母不一定是大写

    在正常情况下,我们所编写的所见到的代码,好像都默许了类名首字母大写,而实例用小写的这一准则。但这并不是强制性的,即使你反过来的也没有关系。

    但有一些内置的类,首字母都是小写,而实例都是大写。

    比如 bool 是类名,而 True,False 是其实例;
    比如 ellipsis 是类名,Ellipsis是实例;
    还有 int,string,float,list,tuple,dict 等一系列数据类型都是类名,它们都是小写。

    3. 增量赋值的性能更好

    诸如 +=*= 这些运算符,叫做 增量赋值运算符。

    这里使用用 += 举例,以下两种写法,在效果上是等价的。

    # 第一种
    a = 1 ; a += 1

    # 第二种
    a = 1; a = a + 1

    += 其背后使用的魔法方法是 __iadd__,如果没有实现这个方法则会退而求其次,使用 __add__ 。

    这两种写法有什么区别呢?

    用列表举例 a += b,使用 __iadd__ 的话就像是使用了a.extend(b),如果使用 __add__ 的话,则是 a = a+b,前者是直接在原列表上进行扩展,而后者是先从原列表中取出值,在一个新的列表中进行扩展,然后再将新的列表对象返回给变量,显然后者的消耗要大些。

    所以在能使用增量赋值的时候尽量使用它。

    4. and 和 or 的取值顺序

    and 和 or 是我们再熟悉不过的两个逻辑运算符。而我们通常只用它来做判断,很少用它来取值。

    如果一个or表达式中所有值都为真,Python会选择第一个值,而and表达式则会选择第二个。

    >>>(2 or 3) * (5 and 7)
    14  # 2*7

    5. 如何修改解释器提示符

    这个当做今天的一个小彩蛋吧。应该算是比较冷门的,估计知道的人很少了吧。

    正常情况下,我们在 终端下 执行Python 命令是这样的。

    >>> for i in range(2):
    ...     print (i)
    ...
    0
    1

    你是否想过 >>>... 这两个提示符也是可以修改的呢?

    >>> import sys                      
    >>> sys.ps1                         
    '>>> '                              
    >>> sys.ps2                         
    '... '                              
    >>>                                 
    >>> sys.ps2 = '................'                 
    >>> sys.ps1 = 'Python编程时光>>>'       
    Python编程时光>>>for i in range(2):     
    ................    print (i)                    
    ................                                 
    0                                   
    1                                   

    小明会继续坚持写这个系列,如果你觉得写得还可以的,不防关注一下,以免掉队,如果可以的话,请分享给身边的小伙伴们。

     
  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/wongbingming/p/9393186.html
Copyright © 2020-2023  润新知