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中,字典有序已经变成语言特性了。因为更节省内存,而带来的‘副作用’不过是字典的有序化。

原文链接(出处)

猜你喜欢

转载自blog.csdn.net/Qwertyuiop2016/article/details/88042181