Python 技巧就是指一小段可以作为教学工具的代码,一个Python 技巧要么简要介绍了Python 的一个知识点,要么作为一个启发性的示例,让你自行深入挖掘,从而在大脑中形成直观的理解。

    函数是Python 的头等对象,可以把函数分配给变量、存储在数据结构中、作为参数传递给其他函数,甚至作为其他函数的返回值。深入掌握这些概念不仅有助于理解Python 中像lambda 和装饰器这样的高级特性,而且会让你接触函数式编程技术。Python 程序中的所有数据都是由对象或对象之间的关系来表示的。字符串、列表和模块等都是对象。Python 中的函数也不例外,同样是对象。
    111.png

    《深入理解Python特性》中文PDF+英文PDF
    《深入理解Python特性》中文PDF,带目录,182页,文字可复制;英文PDF,299页。
    下载: https://pan.baidu.com/s/1rKx_MTEsonF4Y4qqm9m6hw
    提取码: gpck
    222.png
    数据结构是构建程序的基础。各个数据结构在组织方式上有自己的特点,以便在不同情况下高效访问数据。我不赞成只专注于掌握更多的数据结构知识,这是一种失效模式,只会让人陷入假想理论上的幻境,而不会带来任何实际的结果。不过花一些时间来补习数据结构(和算法)的知识总会有好处。无论是花几天时间“突击”,还是利用零碎的时间持续学习,在数据结构上下点功夫都是值得的。
    333.png
    Python 中有哪些数据结构呢?列表、字典、集合,还有……栈?Python 有栈吗?Python 在其标准库中提供了大量的数据结构,但问题在于各自的命名有点词不达意。举例来说,很多人甚至不清楚Python 是否具体实现了像栈这样著名的“抽象数据类型”。相比之下,Java 等其他语言则更“计算机科学化”,其中的命名很明确。比如,Java 中的列表还细分成了LinkedList 和ArrayList。这种细分的命名便于我们识别各个数据类型的预期行为和计算复杂度。
    444.png
    Python 也倾向于使用简单且“人性化”的命名方案。我喜欢Python 的方案,因为人性化也是Python 编程更有趣的原因之一。这种方案的缺点在于,即使是经验丰富的Python 开发人员,也不清楚内置的列表类型是以链表还是动态数组实现的。如果需要用到这些知识却没有掌握,则会让人感到沮丧,也可能导致 面试被拒。

    Python 的内置列表类型能在正常的O(1)时间内完成入栈和出栈操作,因此适合作为栈数据结构。Python 的列表在内部以动态数组实现,这意味着在添加或删除时,列表偶尔需要调整元素的存储空间大小。列表会预先分配一些后备存储空间,因此并非每个入栈或出栈操作都需要调整大小,所以这些操作的均摊时间复杂度为O(1)。这么做的缺点是列表的性能不如基于链表的实现,后者能为插入和删除操作提供稳定的O(1)时间复杂度。另一方面,列表能在O(1)时间快速随机访问堆栈上的元素,这能带来额外的好处。