GitHub 上有个非常有意思的仓库(What the f*ck Python!) ,作者收集了很多有趣且鲜为人知的 Python “特性”,这个有趣的项目意在收集 Python 中那些难以理解和反人类直觉的例子,并尝试讨论这些现象背后真正的原理!
而所有的一切,其实都是 Cpython 内部实现中利弊之间的的权衡,有优点就有缺点,举个和数字相关的特别例子:
>>> id(256)
10922528
>>> a = 256
>>> b = 256
>>> id(a)
10922528
>>> id(b)
10922528
>>> id(257)
140084850247312
>>> x = 257
>>> y = 257
>>> id(x)
140084850247440
>>> id(y)
140084850247344
另外一个例子:
some_list = [1, 2, 3]
some_dict = {
"key_1": 1,
"key_2": 2,
"key_3": 3
}
some_list = some_list.append(4)
some_dict = some_dict.update({"key_4": 4})
你知道此时some_list 、some_dict 的值吗?
Output:
>>> print(some_list)
None
>>> print(some_dict)
None
大多数修改序、映射对象的方法, 比如 list、append、dict.update, list.sort 等等,都是原地修改对象并返回 None,这样做的理由是, 如果操作可以原地完成, 就可以避免创建对象的副本来提高性能。
如果想要添加值到list里面只需要 some_list.append(4) 即可。
当然这个库更多令人惊讶的特性等着你去探索,比如关于字符串操作,迭代列表时删除元素、循环变量泄漏、捕获异常等等。总共有近100来个知识点总结。强烈建议大家好好研读,有利于对 Python 的进一步提高。目前这个库已经有12K+人关注,而且现在有网友提供了中文版了,这无疑给了不习惯阅读英语阅的人有一个利好消息。
英文地址:https://github.com/satwikkansal/wtfpython
中文地址:https://github.com/leisurelicht/wtfpython-cn