huavhuahua 2020-09-17
条条大路通向GitHub。
如果你以前从未使用过Python,那么你可能会从拥有适合初学者的资源的仓库中受益。如果你已经对 Python 驾轻就熟,而你又想学习某个特定的主题,比如算法,那么也有一个专门为你准备的资源库。
Learn-python3 —中级入门(1.8k星)
https://github.com/jerry-git/learn-python3
这个资源库在其初学者部分带你了解19个Jupyter notebook。它涵盖了字符串和条件等基础层面的内容,然后通过讨论类 (面向对象编程的真正快速介绍)、异常 (它们是什么以及如何处理它们),以及 Python 标准库中包含的一些特性 (datetime、正则表达式等)来深入探讨。
每个主题都有一个“notebook”链接,它会把你带到一个主题的介绍和一些示例代码。在你看完之后,还有一个“练习”的链接,它会把你带到一个notebook上,里面有一些例题,你可以填写和测试。
https://nbviewer.jupyter.org/github/jerry-git/learn-python3/blob/master/notebooks/beginner/exercises
然后,还有一个中间的“idiomatic”部分。这一节描述了 "Pythonic特性",这些特性在Python中是许多其他编程语言所没有的。如果你已经熟悉了另一种语言,你可能会想要查看这一节,以获得使用 Python 的技巧和诀窍。例如,有一节介绍了如何在 Python 中以不同于其他语言的方式处理循环。
https://jerry-git.github.io/learn-python3/notebooks/intermediate/html/idiomatic_loops.html
这个资源库也有一个方便的“最佳实践”notebook的链接,你可以用它来了解在创建Python项目时应该实现哪些实践。它涵盖了诸如使用 pipenv 设置虚拟环境以及使用 pytest 进行测试的事情。
Learn-python —中级入门(3.9k星)
https://github.com/trekhleb/learn-python
这个资源库也可以作为Python的介绍,它可以把你从初学者带到中级水平 (我说的中级水平是指除了简单的循环和运算之外,还能自如地使用这门语言)。仓库不是使用notebooks,而是Python脚本的集合,每个脚本都是一个核心类别的子主题,如“操作符”、“数据类型”和“控制流”。
https://github.com/trekhleb/learn-python/blob/master/src/control_flow/test_if.py
每个Python文件都演示了相关的子主题,以及你可以访问以获取更多信息的有用链接。如果你不清楚代码的功能并且需要快速回顾一些理论,这将对你有所帮助。
使用Python文件时,仓库中包含的两个重要功能是测试和样式检查。你可以在“How to Use This Repository”中看到完整的细节,但为了测试,笔者在主函数的底部加入了带有 assert的行,以查看函数是否按照它应该的方式执行,如果你想更改代码并查看其是否仍然正常运行,这将很有用。这里有关于如何使用 pytest 实际运行测试的说明。此外,为了养成遵循 Python 主样式指南 (PEP 8) 的习惯,还有进一步的说明,让你在代码上运行 pylint 来查看 Python 文件是否符合样式指南。
你不必完全跟着课程走,因为作者指出,你也可以把资源库当作备忘单。你可以简单地找到你要找的部分,查看文档,玩玩代码,然后运行测试,并对代码进行过滤,看看它是否能正常工作,是否写得像它应该的样子。
full-speed-python-中级入门(2.6k星)
https://github.com/joaoventura/full-speed-python
这个仓库提供了一本快速浏览字符串和列表的基础知识的书,然后快速深入到相对更高级的主题,如“类”、“协同程序”和“异步编程”。作者在写这本书时采用了一种实用的方法,用代码示例简要介绍了每个主题,然后直接跳到练习问题,读者可以自己尝试。
你可以从README文件的链接下载pdf/epub文件,也可以克隆仓库并自己构建它。
作者写道,“攻读软件工程学位的分布式计算学生在两周内就熟悉了Python,并可以在第三周内实现带有套接字的分布式客户机-服务器应用程序”。如果你已经有一些其他语言的软件工程经验,或者这不是你的第一门编程语言,使用本书可能会帮助你快速掌握Python。
python_reference —中级(2.3k星)
https://github.com/rasbt/python_reference
这个资源库并不像之前的资源库那样,是一个概念组的教程式资源。相反,这个存储库更多的是关于中级主题的不同笔记本的集合,比如“Python中的SQLite数据库操作”和“通过多处理模块进行并行处理”。如果你在Python方面已经有了坚实的基础,那么此资源可能有助于你真正利用该语言的不同特性。与以前的存储库一样,该仓库还包括带有可编辑和运行代码的笔记本。
https://nbviewer.jupyter.org/github/rasbt/python_reference/blob/master/tutorials/not_so_obvious_pyth
这本名为“not so obvious Python stuff”的笔记本(上面的片段)给出了各种Python和Python模块的功能,这些功能可能是你在学习绝对基础知识时没有学到的。你永远不会知道随机提示何时可以帮助你将来的工作。当你刚开始使用Python时,深入理解它是很好的,但是一旦你学习了足够的基础知识,通过一些不相关的技巧(如扩展和填补知识的空白)的汇编会有所帮助。
此外,作者还链接了一些有用的非代码资源,这些资源更多的是作为“理论资源”。例如,作者创建了一个名为“Python中的单元测试--为什么我们要把它变成一种习惯”的资源。
https://github.com/rasbt/python_reference/blob/master/tutorials/unit_testing.md
作者还链接了他们发现对学习Python有用的许多其他外部资源,包括论坛,书籍和现有的Python项目。例如,Reddit上的 r/Python是找到有用的Python技巧以及社区成员展示的个人项目的好地方。
Python编程练习-从入门到高级(10.8k星)
https://github.com/zhiwehu/Python-programming-exercises
这个资源库目前有一百个Python编程练习,难度从初级到高级不等。问题和解决方案最初是用Python 2编写的,但作者后来更新了所有100个问题,包括用Python 3编写的解决方案。
如果你已经熟悉Python,那么其中一些问题似乎太简单了。我想说,能够解决简单的问题是一回事,但是能够迅速解决它们是另一回事。通过学习在线课程或GitHub库中的资源,了解所有这些问题,可以帮助你准备解决编程练习的培训。
如果你陷入困境,则可以使用每个问题出现的“提示”行来尝试找出解决问题的方法。每道题尽量不要往下滚动太多,以免马上看到解题方法,因为尝试找出解题方法的过程有助于你真正记住解题方法(而不是一味地去看、去背)。
这个资源库还有一个“扩展版”,由不同的作者编写,有同样的问题和备选的解决方案。在这个扩展库中,笔者试图展示一个问题的不同解决方式,这可能比原来的解决方案更有效或“Pythonic”。
coding-problems—中级到高级(2.6k星)
https://github.com/MTrajK/coding-problems
就像之前的资源库一样,这个资源库包含了一个全面的编程和算法练习列表,你可以解决这些问题。然而,这个资源库并不是把所有的练习都放在笔记本上,而是为每个练习准备了一个Python文件,其中有问题的描述,然后是它的解决方案。
这些问题的开始难度并不是完全的初级水平,所以我建议在你已经牢固掌握了基础知识(使用函数、控制流等)之后再来做这些问题。
作者还写道,“算法和结构,而不是特定于语言的”。正因为如此,他用Python写了解决方案,因为Python语言的可读性很强,但熟悉其他语言的人应该也能用这个资源库来看看如何处理算法问题。
这个资源库中的问题并不是作者原创写的,因为他明确表示这些问题来自LeetCode等问题解决网站。他的贡献是提供解决方案和解释,帮助人们学习如何解决这类问题。
你会发现,很多问题都可以归纳在一个主旨之下,所以解决这些问题的方法可能有些相似。当你不断地在一个题目中练习相同类型的问题时,你应该会发现这些问题对你来说逐渐变得容易解决。
除了Python文件中的算法问题和解决方案外,他还包含了一份全面的其他资源清单供你使用。有很多在线课程,推荐书籍,以及热门网站的编程问题链接。
TheAlgorithms —中级到高级(82.4k星)
https://github.com/TheAlgorithms/Python
这个资源库还提供了一组文件,向你展示如何在Python中实现不同的算法。这些算法从“算术分析”到“区块链”再到“数据结构”甚至更多的类别。对于如何解决每个问题,并没有那么多的解释,因为这个资源库可以作为实现不同算法的解决方案指南。
有些文件确实给了你一些上下文(和一个或两个链接,让你开始),但是在尝试解决这些算法之前,你可能需要自己做一些研究。如果你是Python的新手,我建议你首先构建基础知识,因为这个存储库实际上是为那些已经熟悉该语言并希望加深其算法知识的人准备的。
作者还为其他一些主要语言(Java、c++、C、Go、Javascript)创建了类似的“学习算法”仓库,你可以在概要文件的固定仓库中查看这些仓库。
GitHub资源库中包含了大量有价值的学习资源,但这并不意味着你需要使用所有的资源。我的建议是先拿一个 "初级到中级 "类型的资料库,把里面所有的学习资料都看完。你应该研究最适合你的学习风格的资源库。例如,如果你想通过可编辑的Jupyter笔记本来学习,从基础到中级主题,你应该尝试本篇的第一个资源库。