python编程入门准备工作

0. 前言

这篇文章是我写给几个小伙伴的。半年前我转行成为程序员后,身边陆续有一些朋友们也有转行的想法。说起来,这几个人和我当时的状况很像,非本专业,从0开始。既然这样,我在这里总结一下那些对于新手来说“知道了就恍然大悟一日千里,不知道就抓耳挠腮原地打转”的经验性知识,希望能帮助各位快速入门。

本篇主要涉及到的是编程工具的准备、安装和使用,python语言的入门方法,python语言进阶路径和数据结构与算法。我推荐的学习路线或许不是最容易打下基础的,但我会尽量保持过程中的乐趣与一步步走下去的成就感。

ps:回头看发现有点啰嗦,我把最重要的部分加粗了,可以只关心加粗部分就行了,尤其是第一部分。

1. 编程工具的准备、安装和使用

设备

首先,不差钱的话,最好配一台macbook pro。macbook是为了它类unix的操作系统,pro是为了不卡。以后早晚会上服务器,用命令行,mac上命令行用熟了,linux也就差不多会用了。当然,在学习阶段。用windows也是可以的,只跑语法和数据结构与算法的练习代码,不会有什么差别。

解释器与运行环境

接下来准备python解释器。一般拿到一个文件后,比如,权力的游戏.avi,我们会双击打开它。但仔细想想,我们只是告诉了操作系统我要打开这个文件,操作系统原本是不知道要用什么工具打开它的。windows会基于后缀,.avi是视频文件,系统里又绑定了.avi后缀的文件是用某些播放器去打开,于是avi文件才会在Windows操作系统中被运行起来。

python也是一样的,我们写的python代码,本身只是一个文本文件,操作系统要运行它,就必须有对应的工具,在这里就是python解释器。目前使用最广的python解释器是官网提供的CPython,所以如果想要获取一个python解释器,就直接去官网下载安装python就好了。

暂时其实不需要关心的小tips:CPython是用C语言实现的一个python解释器,但它有个底层的问题叫“GIL”,全称是global interpreter lock, 顾名思义,它是一个全局解释器锁。这个锁的存在,会让一个python进程在同一时间只能使用一个CPU。这个是我室友在外面试时每次必被问到的一个问题,确实也是大家比较喜欢谈论的。至于更多的细节,比如它到底会在什么情况下对我们的代码产生影响,会产生什么样的影响,大家是用什么方法去解决这个问题的,可以以后再了解。

言归正传。虽然我们可以从官网上得到python解释器,但那对新手来说往往并不足够,还需要了解、设置很多其他东西,才能比较顺利的开始使用python。这里强烈推荐python环境管理工具:Anaconda

Home – Anacondawww.anaconda.com《python编程入门准备工作》

简单来说,安装了Anaconda,就不用关心太多python安装配置问题,全都交给Anaconda就可以了,我们要做的就是正确使用它。

豆豆:Anaconda介绍、安装及使用教程zhuanlan.zhihu.com《python编程入门准备工作》

这篇文章详细介绍了Anaconda在不同平台上的安装、使用,跟着这篇文章把Anaconda安装完成,自己的电脑上就有了可以运行python的程序了。

这里也要说一下python语言版本的问题。目前主要的区别是python2和python3。个人推荐python3,而且最好是python3.6。python2有很多意想不到的坑,或者很多初学者应该并不愿意去关心、解决的问题,比如字符串打印出来为啥是\xe6这样的东西,而且官方也已经表态说将逐步不再维护python2了,所以还是跟上新版本比较好。python3相对更友好一些,用起来坑相对少,但3.7刚发布,坑还有待其他大神踩,3.6刚刚好。Anaconda中可以直接指定python版本,也可以安装多个python,这也是Anaconda方便的地方。python2和python3的区别实际上微乎其微,代码甚至不用怎么改就可以在2和3上切换。

IDE

然后就是IDE。IDE是集成开发环境,主要包括代码的编辑、运行、调试。打个比方,python代码是菜谱,解释器是锅碗瓢盆,那么IDE就是厨房。在野外就地埋锅做饭不是现代高效的生产办法,我们需要一个集成了各种锅碗瓢盆菜刀水池燃气灶的空间。python的IDE我推荐两个,一个是Anaconda带的Jupyter notebook,一个是PyCharm

PyCharm: the Python IDE for Professional Developers by JetBrainswww.jetbrains.com

先说Jupyter notebook,这个IDE最大的特点是可以一行一行地分别运行。初学者写代码总是希望稳扎稳打,这一步先做对了再做下一步。Jupyter可以帮助我们简单高效地把代码分块,一块一块地执行,从而快速调试、跑通,即使中间错了,也只需要重跑那一块的代码即可。下面这个图是我写的一个简单的示例。

《python编程入门准备工作》
《python编程入门准备工作》

没错,Jupyter notebook是一个在浏览器里就可以运行的IDE。这些代码分别在不同的块里被运行,但属于同一个python脚本。不同平台上使用Jupyter notebook的方式不太一样,我在Macbook上直接在命令行里输入jupyter notebook就可以在当前目录下打开了(安装了Anaconda之后)。具体的使用方法可以参照这篇文章(又是这位朋友,非常详细,确实是用心了!)

豆豆:Jupyter Notebook介绍、安装及使用教程zhuanlan.zhihu.com《python编程入门准备工作》

Jupyter notebook比较适合写小型、需要较多尝试的单个python脚本,如果要完整开发一个项目,更推荐PyCharm,这也是我目前重度依赖的IDE。PyCharm是为大型项目设计的,换句话说,它功能非常强大,但相对比较复杂,学习成本略高。初学的话,只是刷一刷算法题,Jupyter notebook就足够了。另外,PyCharm的专业版是收费的,但幸运的是,用大学学生邮箱可以申请免费使用专业版的PyCharm,在官网上就可以直接操作。也可以先使用社区版或者先免费试用一个月。

PyCharm的安装过程就不多说了,就是一路点点点。简单说一下如何创建一个项目,以及告诉PyCharm“我要用Conda环境”(conda环境就是Anaconda环境)。

首先创建一个项目(所以说PyCharm是比较大而重的工具,写个脚本都这么麻烦)

《python编程入门准备工作》
《python编程入门准备工作》

然后告诉PyCharm,我这个项目要用Anaconda的环境来运行。在File的左边:

《python编程入门准备工作》
《python编程入门准备工作》

接下来:

《python编程入门准备工作》
《python编程入门准备工作》

点进Project Interpreter(项目解释器)中,我这是已经配好了一个环境,如果没有设置的话,一开始会是这个样子:

《python编程入门准备工作》
《python编程入门准备工作》

在这个窗口里找到Conda Environment,点击去后变成这样:

《python编程入门准备工作》
《python编程入门准备工作》

第一次创建的话,直接点ok,就设置完成了。

设置完之后,在这个地方新建一个python文件:

《python编程入门准备工作》
《python编程入门准备工作》

就可以开始写代码了:

《python编程入门准备工作》
《python编程入门准备工作》

写好之后,可以右键后在菜单里点Run,就开始运行了,结果在下面的框框里显示:

《python编程入门准备工作》
《python编程入门准备工作》

PyCharm实在是有点复杂,简单掌握如何让程序在PyCharm里跑起来是当务之急,以后的一些功能可以慢慢探索,会有很多惊喜。

另外简单说一下vim。vim是Linux, macOS等操作系统自带的一个工具,类似于windows打开txt的记事本。相比于其他IDE,vim在没有加插件的情况下基本谈不上是一个IDE,只是一个文本编辑器。用的比较多的原因是,没有人会在Linux上安装PyCharm,在服务器上开发代码的时候没有其他IDE可用(文本编辑器倒是有几个,emacs之类的,但和vim大同小异,往往还没vim好用),所以就只能用vim。这是一个简单配置过的vim界面:

《python编程入门准备工作》
《python编程入门准备工作》

vim有超多的快捷键,然而我现在也没掌握几个。那些快捷键主要是为了方便、快速、准确地使用vim,如果不追求效率只追求“能用就行”,那只需要记住几个命令就可以了。对于初学者,在接触服务器开发之前,其实没必要学习vim,但适当地掌握vim的基础用法,有助于在工作中提升效率,减少Google如何使用vim的时间。

python准备工作基本告一段落了,好长。。。总结一下,有钱的买台mac,不然就在自己的电脑上,安装个Anaconda,打开Jupyter notebook,就可以开始愉快地学习python了

2. python语言学习

入门

python非常好学,尤其是在已经有了一定其他语言知识的基础上,熟了之后,写一些算法题,就和用英语解决小学奥数题是一样的感觉。

首先推荐廖雪峰老师的个人网站:

Python教程www.liaoxuefeng.com《python编程入门准备工作》

完全从0开始教学,非常适合用来入门。但个人建议,前期最好跳过“字符串和编码”这一讲,这一讲不会有初学者会感兴趣的,我们只需要知道,自己写的脚本,自己用的编码,没这么多问题,这个阶段完全不需要担心,就可以了。等后面学完了,回过头来想练练内功,可以把这一讲再补上,不然学习过程会在这一讲变得十分痛苦。

另外,一些高级语法也可以先放一放,比如map这类的函数,递归函数,列表生成式、“迭代器”是什么,还有让新手闻风丧胆的“装饰器”,虽然这些对“理解python语言与设计思想”是很有帮助的,但这些对编程本身意义不大,更多的是一种“技巧”或者“想法”、“意图”。这些可以在后来慢慢感悟,没必要一开始就弄懂。

还有一个网站是菜鸟教程

Python3 教程 | 菜鸟教程www.runoob.com《python编程入门准备工作》

可以把这个网站当作工具书来查。比如,list切片语法,如何返回一个dict的浅复制之类的。

另外,我这也有一份当时课上老师的PPT,质量奇高,但因为是老师的课件,没有公开,不方便在这里展示。有我微信的老铁想要的话私下和我说一下。

熟练

在大概花费一到两周来熟悉如何使用python实现自己想要的一些初步的功能后,就应该开始寻找其他值得训练的题目,来进一步提升自己的编程水平。初学者快速提高代码水平的方法就是多写有质量的代码。这里推荐LeetCode:

领扣 (LeetCode) – 极客挚爱的在线技术平台leetcode-cn.com《python编程入门准备工作》

LeetCode本来是一个算法题网站,但因为python语言的特性,python往往比C/C++/JAVA这些语言提供更加丰富的功能,导致一些针对比python低级的语言的算法题,到python那里基本不需要用什么算法知识,所以这一部分题非常适合用来练手,以熟悉python语言本身。一开始最好从题号比较小的简单题入手,这些题目一开始大概就是给C设计的,没想到python其实实现起来特别容易。等大概刷二三十道之后,python语言的基础用法相信已经不再是问题了。

数据结构与算法

数据结构与算法才是程序的灵魂(我是这样认为的)。数据结构就是数据与数据间的关系的抽象,算法是数学上的概念,泛指解决某个问题的解决过程。目前这个阶段,数据结构可以先学习集合、线性表(包括顺序表、链表、字符串、栈、队列)、哈希表(对应python的dict)、树与二叉树;算法可以先学习时间复杂度分析、递归与动态规划、二分查找、排序算法、散列。这些都是比较基础的,最好动手实现一遍。初级程序员面试时往往会被问到其中的知识,比如手写一个快速排序,写不出来会比较丢人。

这块的话,书就不推荐了,我没看过。。。主要的学习方式是直接去解算法题,我始终觉得,即使知道了“动态规划”是个十分强大的算法,不实际去A一道类似于股票操作最大收益这样的问题,也很难感同身受。这时候LeetCode又派上用场了,本身LeetCode就是各大厂面试题汇总,面试的时候又贼爱考数据结构与算法(毕竟其他的问题太杂太碎,没必要整理面试题,系统地学习比较好),所以LeetCode上的算法题质量还是很不错的。可以在学的过程中尝试一下中等难度,甚至困难难度的题,有时候实在做不出来就先放放,过阵子回来再看或许就有思路了。

进阶

熟练掌握python基础语法之后,如果还想进一步提升,可以参考下面这两个网站

python cookbook:

Python Cookbook 3rd Edition Documentationpython3-cookbook.readthedocs.io

官方文档:

3.6.8rc1 Documentationdocs.python.org

python coockbook对应了廖雪峰教程,可以跟着书进一步掌握python语言。官方文档则对应了菜鸟教程,官方文档给出了所有python原生语言的说明和示例,以及一些目前存在的问题。如果能完全掌握python cookbook(在我看来那几乎要花3到6个月),那么你已经可以在简历中写“精通python”了。

目前这本书我也只看了不到一半,已经感觉确实受益匪浅。但有一点要题型的是,这本书会教我们如何把代码写得更加“pythonic”,而有时候,太追求python范儿的代码,会损失一部分代码的可读性。所以尽量打降龙十八掌,以克敌制胜为目标,少耍些花里胡哨的冲灵剑法,以免一两周后自己都认不出自己写的是什么。。

如果Python cookbook看得觉得有些痛苦,记住一个口诀,“万物皆对象”。想通了这个之后,语法层面的东西就迎刃而解了。

其他值得掌握的python工具

python最近几年大火,大家也都知道是因为机器学习、深度学习,广泛使用python作为开发语言。对于机器学习、科学计算的需求,python有丰富的第三方库,主要包括numpy, pandas, scipy, scikit-learn等等,各种机器学习算法、深度学习框架,也有对应的不同抽象层次的库可以使用,比如用于分词的jieba,树模型的xgboost, lightgbm,大名鼎鼎的深度学习框架tensorflow, 还有十行代码搭建神经网络的,在tensorflow上又封装了一层的keras等等。这些开源工具的使用会让你快速完成工程任务,学习这些库也就意味着要从学习阶段逐渐转向工作、产出阶段了。都不难学,现查现用都行,或许这就是python的魅力吧。

3. python之外值得学习的知识

语言只是编程的一部分,前面在python语言中虽然提到了数据结构与算法,但数据结构与算法本身并不依赖语言。还有其他的一些知识,有的是易筋经之类的内功,有的是小擒拿手这样的实用工具,这里也简单总结一下

体系结构知识

操作系统、计算机网络,这两部分是真正的易筋经。我也在学,很难有高层次的建议,只能说,这部分很有用很有用,每学一点都有豁然开朗的感觉。但这部分学起来并没有刷算法题那里那么有趣,所以还是需要一些个人努力在里面的。

Linux命令/shell编程

cd,ls,wget之类的命令肯定是要知道的,还有很多其他的工具,像crontab定时任务, 管道grep过滤,tail/less之类的查看部分文件,kill -9杀进程之类的,很多很多,是需要学习一下。这个有点像我们小时候学windows系统一样,也是一点一点学起来的,怎么开机,怎么刷新,点开始菜单哪里是什么意思,如何打开扫雷。。。这个如果掌握的太少(我就是QAQ),会影响工作效率。

数据库

数据库底层原理只是了解大概就够了,但工作中肯定会用到的是数据的使用。数据库主要分SQL和NoSQL两部分,SQL是结构化的数据库,可以理解为数据按照excel那样存,有行有列,代表的有MySQL, Oracle;NoSQL是非结构化的数据库,和python的字典比较像,很灵活很方便,代表的有MongoDB, redis。

数据库语言非常简单,SQL我都是现查现用,基本没有障碍,Mongo, redis也基本都是现查现用。这些数据库本身设计出来就是为了工程化使用的,自然是越简单越好,所以,学习成本很低,也不用过于精通,会了就行。

git

git是一个代码管理工具,可以比较安全地管理代码。学习阶段肯定是用不到了,工作后大概率会用,也就是查一下的事情。当然,能提前了解是最好的。

Google

关于编程问题,就不要再查百度了,尽量查google。如果问题比较小众,或者中文查不到解决办法,一定要试一下英文。国外有StackOverFlow这个专门解答编程问题网站,类似知乎。还有github,可以找到一些开源库的官方文档,以及一些issue。

好吧,说了这么多,看一眼篇幅最大的还是配置python环境。虽然说了很多,但那里是一切的起点,而且挺容易卡住的。环境问题又经常是个大坑,如果有其他问题,可以问我,能解决的尽量解决。。

    原文作者:陈东文
    原文地址: https://zhuanlan.zhihu.com/p/51789559
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞