zoukankan      html  css  js  c++  java
  • 盘点 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                                   

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

     
  • 相关阅读:
    SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1)
    sp_rename sqlserver 表 列 索引 类型重命名
    T- SQL性能优化详解
    sql-索引的作用(超详细)
    用一条SQL语句取出第 m 条到第 n 条记录的方法
    SARG
    git
    ssh
    70小事
    websocket
  • 原文地址:https://www.cnblogs.com/wongbingming/p/9393186.html
Copyright © 2011-2022 走看看