Python冷知识

1、省略号也是对象

这有什么用呢?没什么实际用处,可以替代pass做占位符

```

print(type(...))

bool(...)

```

2、增量赋值的性能更好

下面两行其实在效果上是等价的,但在性能上,第二行高于第一行 这是因为+=的魔法方法是__iadd__ ,而+的魔法方法是__add__, 这两个方法的实现是不一样的,有兴趣的可以自己去了解

    a = 1; a += 1

    b = 1; b = b + 1

3、索引越界

报错还是输出什么?

    list1 = [1, 2, 3]

    print(list1[5:])

4、for写一个死循环

    for i in iter(int, 1):

    pass

iter的用法除了将序列变为迭代器,还能接受两个参数,一个是callable参数,另一个是sentinel参数,当这个callable返回的是sentinel,则迭代停止 而int是一个内建方法,只会返回0

5、intern机制

    s1 = 'hello'

    s2 = 'hello'

    s1 is s2

同样的字符串对象只保留一份,这就是intern机制,但当字符串有除ASCII以外的字符或长度超过20个字符时,不启用intern机制

6、_ 的使用

当要使用一些没有意义的变量时,一般会用_代替,比较常见的循环,比如 for _ in range(10) 我们只在乎循环次数,而不在乎循环变量

7、for else和try else

if else都知道怎么使用,那for else和try else呢

8、空字符串

想想下面的结果又觉得没有错,就是不对劲

    print('' in 'aabb')

    print('aabb'.count(''))

9、---

python允许不加括号,因为并不会产生歧义,但建议别这样写代码,没什么意义,还不好阅读,当然你非要把3写成------3也不报错

    print(--3)

    print(6---+-------------------4)


10、字典有序

字典的无序性一直是教学的一个知识点,但Python3.6之后,字典其实是有序的,但官方是这样解释的:这个新实现的顺序保留方面被认为是一个实现细节,不应该依赖(这可能会在未来改变,因为考虑到向旧版本兼容的问题)。不过在Python3.7中,字典有序已经变成语言特性了。因为更节省内存,而带来的‘副作用’不过是字典的有序化。

原文链接(出处):https://mp.weixin.qq.com/s/Er7e91UOEJ1sucbFN_n_-w

你可能感兴趣的:(Python冷知识)