python自学指南

近年来,Python是一门非常火的语言。我根据我的学习历程,总结了一些我的学习经验。这篇文章会逐渐更新,但现在就写这么多。

自学流程以及教程

  1. 认识黑框框。

    几乎所有的编程语言都要从这个黑框开始,在Windows中被称作cmd(命令提示符),而在Linux、Mac OS中被称作terminal(终端),即使有IDE,在程序实际运行中也免不了和这个东西打交道,所以学习基础的命令操作和认识命令提示符中的提示非常重要,这是任何编程学习的基础。

  2. 安装Python、找一个靠谱的IDE。

    如今,安装Python是一个非常简单的工作,和安装其他软件一样,下载安装包,一路下一步就足够了。

    然后就需要寻找一个IDE了,IDE可以避免很多麻烦的事情。我个人推荐PyCharm社区版,免费,几乎包揽了所有工作,基本不需要配置,支持官方中文。当然,你也可以选择VS Code、Visual Studio或者Notepad++这样的工具。

  3. 学会基本语法。

    初学者学习语言,第一件事就是学习如何让程序运行起来的基本语法。而想让程序能够完成目的,其基础是顺序、分支、循环三种语句。Python中有很多关键字,但这些关键字有些并不常见(例如yield, nonlocal, async 等),不认识也没关系,只要不用就可以了。

  4. 认识一些基本函数。

    Python中有很多内置函数,然而和关键字一样,大多数内置函数并不会在初学中用到(例如globals(), locals(), compile()),这些函数提供了一些Python魔法,但是想正确地使用它们是很难的,所以只需要认识一些常见内置函数就足够了。非常常见的内置函数有print(), input(), open(), int() 等等,在学习的过程中就会掌握足够的内置函数了。

  5. 了解标准库提供的功能,学会常见的标准库使用。

    标准库是一个语言自带的库,Python作为一个自带强大功能的软件,自然也携带了庞大的标准库。这些标准库有的在几十年前非常常用,也有的是新库,选择一些你觉得需要的看就足够了。而选择标准则是这个中文标准库索引中,看介绍你觉得对自己有用的,如果看不懂那就是暂时用不上。

    Python标准库

  6. 认清自己的方向,找到合适的包。

    Python是一个通用编程语言,可以做到非常多的事情。然而术业有专攻,即使是专业的程序员也无法兼顾所有工作。你只需要找到适合你的包即可。

我用过的教程

廖雪峰的Python教程

我也是看他的教程学来的,教程本身非常实用,学完后也能独立地使用Python完成想要的功能,但后期进度稍快,很多东西并没有介绍全,需要自己去其他地方补充。有些东西并不需要学会(比如metaclass),也有些需要慢慢理解(比如装饰器)

菜鸟教程

比起廖大的教程来,菜鸟教程虽然简单,但介绍的东西更细节,可以了解更多Python内置函数,在完成想要的功能时可以更多地借助Python自身提供的功能,简化代码,提高生产力。

Python标准库

平时多看看感兴趣的库,可以学到库的用法,而且可以学会一些专业术语,为搜索提供更恰当的词汇。

如果你想做这些,那么Python并不适合你

尽快找到一份编程工作

去学Java。

首先是市场对Python程序员的需求。Python是最近很火的一门语言。但是请注意,Python的火,并非来源于其在传统领域的大规模应用,而是来自于近年来深度学习工具对其的适配。深度学习工具本体使用C、C++、CUDA编写,并提供了更友好的Python接口,而借着人工智能的热潮,Python成为了近年来热度最高的语言之一。但是研究人工智能需要公司有很大的投入,并且短期内回报很小甚至根本没有,所以小公司很难入局。这也导致了人工智能岗位并不多,同时对应聘者的学历、算法水平具有很高的要求,依靠人工智能应用找到岗位是非常难的。

其次再来说说Python在传统领域的应用。除去像阿里、腾讯这样的覆盖面极广的互联网公司,还有许多依靠互联网来运营业务的公司,而这些公司才是程序员招聘的主力。而对这些公司而言,互联网并不是一个研究领域,而是拓展业务的基础设施。所以他们并不需要人工智能,也不需要新颖的算法和快速更迭的软件版本,他们只需要一个成熟系统的商业解决方案。在这方面,Python是远远不足的,虽然有flask、django这样的框架,但国内针对这些框架开发的工具很少。同时已有的成熟解决方案大量使用Java以及基于Java的Spring框架,这些公司也更可能已经有了一套使用它们的系统,Python很难入局这个方向。

最后就是培训的问题,纵观Python培训的市场,目前主流的培训内容有四个:爬虫、人工智能、数据分析和操作Word、Excel等。而在一些培训网站的官网上则有flask、django的教程。这其中,大多数的培训是在Python近年热度提高以后才出现的,其质量参差不齐,有些更是舍本逐末(参见下文),学会后岗位需求也少。而Java的培训则目标性更强,并且培训机构在该领域耕耘的也更久,质量差的教程基本已经被淘汰。并且教程内容几乎是清一色的JavaEE、Spring框架,同时也有大量成熟的商业级开源项目可供参考,找工作范围也更大。

操作 Word、Excel、PPT内数据

以前我这里写去学VBA,但是没想到现在(修改于2024-09-21)Excel官方开始支持Python了,或许将来内嵌Python指日可待了。

但是VBA仍然占据着存量宏代码的半壁江山,所以学仍然是可以的。

不过如果有以下需求的话,Python确实是更好的选择:

  1. Excel数据来源于网络,需要使用爬虫工具。
  2. 大规模(十万级及以上)数据计算,需要使用numpy、pandas。

游戏开发

去学专业的游戏开发工具,并考虑一下是不是自己还欠缺美工、策划等技能。

有些教程会使用PyGame库进行教学,通过自己实现一个小游戏来激起读者的学习兴趣,同时让学习过程有一个明确的目标,这是一个不错的实践,但是如果想进行正式的游戏开发,那么Python不适合你。首先,Python没有游戏地图、事件等的编辑器,所有的任务都需要依赖手工编写代码完成,这是一个极度拖慢游戏开发进程的做法,在游戏开发中并不可取。相应的,想要开发什么样的游戏,就去找对应的开发工具,比如RPG Maker、Unity、Unreal等工具,不同的工具用于不同的游戏开发场景,你需要根据想开发的游戏选择一个工具并选择学习的语言。

当然,如果你已经熟练使用Python,那么用它开发一个小游戏也未尝不可。但如果你决心要做游戏行业,那趁早转学Unity、UE或者Godot等专业游戏开发工具更好一些。

常见的坑

不要在程序能正确运行出结果前尝试优化程序

有一句话叫做:过早的优化是万恶之源。这句话在软件工程中非常常见。Python本来就不是一门以执行速度快闻名的语言,在尝试优化几微秒,甚至几纳秒的速度前,先把功能正确地完成才是更重要的。同时,在大多数情况下,速度并非瓶颈,此时应该着重代码的可读性优化,让将来你可以看懂自己写了什么,而不是程序的性能。

不要修改Python包中的代码

Python的包,是扁平化的,除了你使用这个包外,其他包也可能使用这个包,如果修改这个包的代码导致了包行为出现错误,很可能会连带导致其他依赖该包的包也出现错误。最好的方式是复制包中的代码到自己的文件中进行修改以达成目的,通常这并不会很难。如果一定要修改,那么新创建一个虚拟环境,在其中修改可以最小化这种行为带来的影响。

不需要学习算法

有些人觉得一定要学算法才是学编程,这必是不可能滴。算法虽然很重要,但不了解算法也不会怎么样,常见的算法Python已经帮你做好了,不必担心算法学习。

不需要了解计算机底层逻辑

都学Python了,你和底层就几乎一点关系都没有了。编程并非是越底层越厉害,如果对计算机有兴趣当然可以研究底层逻辑,但只是学习编程用于完成目的的话我们并不需要了解计算机底层是怎么做的,Python已经帮我们屏蔽了很多复杂且难以理解的底层操作,我们只需要知道它是怎么用的,不用管它是怎么来的。

PEP标准是很好的指导,但不要被其限制

PEP是为了让代码更具可读性,也就是PEP是希望人们更容易读懂Python代码,如果你的功能不遵循PEP标准会更有可读性,那么就不需要遵循。

不要迷信 async/await,最好不要使用

牵扯到网络编程,总有人认为async/await更好,因为它们更快,但是实际情况并非如此。一个重要的原因是:async编程具有传染性。也就是说,如果你使用了async,那么必须所有的操作都使用async才能保证异步操作是通畅的。如果哪里有任何一步被阻塞了(比如调用了requests.get(), time.sleep() 或类似的函数),那么整个协程都会阻塞在此处,其他协程也无法运行,其效率相比多线程陡降。而大多数Python包并没有提供async函数,所以很容易遇到无法解决的性能瓶颈。当然,对于熟练Python程序员来说,可以用多线程或多进程对协程进行包装,但这就失去了使用协程切换速度快的优势,如果不是需要完成基本功能需要使用协程(比如telethon,那么不必追求协程。有关Python的协程,我可能会再写一篇博文。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2025 Ytyan

请我喝杯咖啡吧~