GitHub 上有个非常牛逼的仓库, 作者收集了很多有趣且鲜为人知的 Python "特性". 这些特性有些是真正的特性, 也有些是陷阱, 因为光从表面看起来就觉得反人类直觉, 而所有的一切, 其实都是 Cpython 内部实现中利弊之间的的权衡, 有优点就有缺点. 举个和字符串相关的特别例子:
- >>> a = "wtf"
- >>> b = "wtf"
- >>> a is b
- True
这个比较好理解, a 和 b 指向同一个对象.
- >>> a = "wtf!"
- >>> b = "wtf!"
- >>> a is b
- False
多了一个感叹号, 两个变量指向的就不是同一个对象了.
再来看:
- >>> a, b = "wtf!", "wtf!"
- >>> a is b
- True
如果把两个变量写在一行, 又指向同一个对象了. 初学者看了一脸懵逼, 即使你是有经验的 Python 开发者, 第一次见到这种情况也会大为惊讶, 原来 Python 中还有如此骚操作. 如果把代码放在 IDE 中执行, 结果又不一样:
- a = "wtf!"
- b = "wtf!"
- print(a is b) # True
输出结果是 True, 是不是觉得太匪夷所思了. 其实, 这里面涉及到的知识点是 CPython 为了提高性能对字符串对象做的优化, 涉及到字符串的 intern 机制, 还有代码块的知识等概念.
当然这个库还总结了很多很多类似让你惊讶的操作, 比如关于哈希操作, 有关字典特性, 默认可变参数陷阱等等. 总共有近 100 来个知识点总结. 强烈建议大家好好研读, 有利于对 Pytho 的进一步提高. 目前这个库已经有将近 10000 人关注, 而且现在有网友提供了中文版了, 这无疑给了不习惯阅读英语阅的人有一个利好消息.
英文地址: https://github.com/satwikkansal/wtfpython
中文地址: https://github.com/leisurelicht/wtfpython-cn
方便你阅读, 我将其制作了一份 PDF 格式了, 方便你离线阅读. 你可以在微信公众号「Python 之禅」后台回复关键词「2」获取这本电子书!
来源: https://juejin.im/post/5c071da451882516eb5636a5