编程零基础应当如何开始学习 Python?

关注者
44,427
被浏览
9,087,182

568 个回答

零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有很多的学校使用python作为入门编程语言。此外,python在机器学习,人工智能领域也非常流行,算得上是算法工程师的标配编程语言。

下面的内容由浅入深,建议按照先后顺序阅读学习。如果你觉得内容不错,希望别做松鼠党,收藏了就不了了之,坚持读完,有条件的最好是购买书籍阅读效果更好。本文分享的内容和文末推荐的书籍均出自vamei君。

一. Python基础

Python基础01 Hello World!

Python基础02 基本数据类型

Python基础03 序列

Python基础04 运算

Python基础05 缩进和选择

Python基础06 循环

Python基础07 函数

Python基础08 面向对象的基本概念

Python基础09 面向对象的进一步拓展

Python基础10 反过头来看看

二. Python进阶

Python进阶01 词典

Python进阶02 文本文件的输入输出

Python进阶03 模块

Python进阶04 函数的参数传递

Python进阶05 循环设计

Python进阶06 循环对象

Python进阶07 函数对象

Python进阶08 错误处理

三. Python深入

到现在为止,Python学习已经可以告一段落。下面的部分,我想讨论Python的高级语法和底层实现。这一部分的内容并不是使用Python所必须的。但如果你想从事一些大型的Python开发(比如制作Python工具、写一个框架等),你会希望对这一部分内容有所的了解。

Python深入01 特殊方法与多范式

Python深入02 上下文管理器

Python深入03 对象的属性

Python深入04 闭包

Python深入05 装饰器

Python深入06 内存管理

四. Python标准库

Python标准库的重要性在于:

  • 标准库是Python的一个组成部分。
  • Python的哲学是一个问题只有一个最好的解决方法。这些标准库为许多问题提供了一个标准的解决方案。

Python标准库——走马观花

Python标准库的学习准备

Python标准库01 正则表达式 (re包)

Python标准库02 时间与日期 (time, datetime包)

Python标准库03 路径与文件 (os.path包, glob包)

Python标准库04 文件管理 (部分os包,shutil包)

Python标准库05 存储对象 (pickle包,cPickle包)

Python标准库06 子进程 (subprocess包)

Python标准库07 信号 (signal包)

Python标准库08 多线程与同步 (threading包)

Python标准库09 进程信息 (部分os包)

Python标准库10 多进程初步 (multiprocessing包)

Python标准库11 多进程探索 (multiprocessing包)

Python标准库12 数学与随机数 (math包,random包)

Python标准库13 循环器 (itertools)

Python标准库14 数据库 (sqlite3)


附:一定要实践!实践!实践!

这个问题下面这么多人推荐了这么多 Python 资源,估计零基础新手看到了会眼花缭乱吧。

作为非计算机专业出身、自学编程的过来人,我知道想找到一份适合自己的入门教程不容易。不如就在这里分享一下,如何鉴别一份 Python 教程是否适合新手


鉴别要点1:这份教程是否支持 Python3?

在2020年,Python 核心团队就会停止支持 Python 2 了。目前不少主流库的新版本也停止支持了 Python 2 ,包括 Django、Flask、Numpy 等等。

如果你是现在开始学 Python,当然要选 Python 3 了!这听起来简直像是废话。

然而,在知乎上被热捧的 Learn Python the hard way 的作者 Zed.A.Shaw 就是 Python 2 的顽固分子。你在京东上能看到的《笨办法学Python第3版》就是基于 Python 2 写的。

想要分辨 Python 2 还是 Python 3 很容易,你看 print 的写法就知道了。

所以,如果你执意要选择这份教程上手,那肯定选了是一条难走的路啊,这可不是 the hard way 么。在别人开始学语法的时候,你需要折腾各种兼容问题,比如教程里的代码没法在你电脑上正常运行,比如报错了无法获得帮助。有多少人是在这个坑放弃学习 Python 的,举个手呗

还有啊,另一个在知乎上被热捧的 code cademy , 也是用的 Python 2,并且丝毫没有要更新的意思。也许这家2011年创立的公司,已经落后于这个时代了吧,可惜了。


鉴别要点2:这份教程是否把概念解释清楚了?

所有教程都会标榜自己适合零基础,但是不是真的适合零基础,要看有没有把概念解释清楚。

无论教程的形式是直播、录播、博客、论坛还是书籍,能把概念讲清楚才是最重要的,这才让新手有了学明白的可能。

对于零基础新手来说,什么是「变量」、什么又是「函数」,这些编程常识新手是没有接触过的,但是很多大牛根本不屑于去讲清楚这些,因为他们学编程学了太久了,这些常识就像「早上要刷牙」一样已经根深蒂固了。

这么说可能你还不信,那可是知乎上千万人都点赞的教程啊,怎么可能讲不清楚概念?那我们就来扒一扒,各个教程是怎么讲「变量」这个概念的。


R 教程:变量是存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。
小白心声:哈哈哈,啥玩意?内存我知道,什么是在内存中开辟空间?我需要关心这个么?

这就是典型的用一个抽象概念解释另一个抽象概念,如果你看的是这样的教程,看的越多,就发现自己不明白的概念越多。


V 教程:Python 的变量不需要声明,你可以直接输入:>>>a = 10。
那么你的内存里就有了一个变量a, 它的值是10
小白心声:变量这一节上来第一句话就是「变量不需要声明」,我是不是错过什么了?声明是什么?不需要声明意味着什么?如果需要声明是什么样子的?

这让我想起我家猫有次得猫藓,京冠医院院长给开了瓶药,第一句就说「这个药可以舔。」当时我是懵逼的,难道这个药是口服的?后来才知道,这个药是用来涂抹的,但一般用来涂抹的药都是猫不能舔的,京冠独家研发出来了这种猫舔了也没关系的药,很安全,所以院长十分骄傲的先介绍这个特性。但不了解这些背景,当然就不明白他为什么那么说。

这是不是和 V 教程上来就说「变量不需要声明」很像?


L 教程:变量的概念基本上和初中代数的方程变量是一致的,
只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
小白心声:初中代数我学过,x+1=2 嘛,所以变量就是那个 x,是未知数的意思喽?好嘞,那我接着往下学。诶,这有个 x = x + 1 是啥意思?x 是未知数的话,两边一消掉变成了 0 = 1 ??? 这个在数学上不成立啊?难道我初中数学没学好……

这个例子说明了,不恰当的类比会给零基础新手带来错误的印象,以为自己理解了,其实还是没理解。


不是故意找反例,这些都是找的知乎上热捧的知名 Python 教程节选的。为了避免得罪人,这里就不说这些教程分别是谁的了,再说下去估计要有人找我问多少钱能删帖了。你也可以看看你手里的教程是怎么解释变量这个概念的,看看较真起来的话你真能看懂么。

不是自卖自夸,我找了一圈真没找到一个能讲明白的,所以在这里只能拿我写的教程来举个例子,大家来对比下了。

来自麻瓜编程《让小白学上瘾的 Python 入门课》https://www.mugglecode.com/introduce

可能我是第一个提出这个说法的,变量的作用就是用来给数据起名字的。为什么要给数据起名字?在这一页之前你会做20个交互练习,做完你就发现那些数据就消失了,没办法再次使用了。

想要下次能方便的使用数据,就需要给这个数据起名字,也就是变量赋值。


我自己是新手自学过来的,所以我知道用概念解释概念有多讨厌。我的思路就是先让你置身于使用情景,然后你就自然明白为什么了。

这块可能说的有点多了,我想说的是,找一份能把概念解释清楚的教程上手去学吧。也不是说非得是我的教程,哪个你能看懂,你就学哪个。

记住,你看不懂,不是你的错,一定是教程的问题。看不懂赶紧换。


鉴别要点3:有没有概念的使用场景

最后这点不知道会不会有争议。先确认一个事情,你学 Python 是为了拿来用的对吧?你不是为了研究编程语言进化史的吧?

如果这点有共识,那么你学每一个新语法的时候,就会很自然的想到:我学的这个东西能用在哪呢?怎么用呢?

那么你可以去看下,你手中的教程有没有回答你的这个问题。

这里只举一个典型例子,L 教程条件判断那一节:

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

这个程序是为了判断 age = 3 是属于成年人、青少年还是儿童。我有个傻问题啊,既然已经知道了 age = 3 ,干嘛还去判断呢?

其实大多数基础教程都有这个通病,例子是伪代码,大多数都是1+1,abc 这种例子,没什么实际意义。这也就是为什么你看完基础教程,却不知道怎么去用。没学过使用场景嘛,怎么可能自己想到。

那么多教程,却很少有人能点破这个事情,为什么要用条件判断?因为有些事情的发生是未知的啊。之所以要用条件判断,是为了预测程序可能发生的不同情况,再针对每种情况制定对应的解决方案。

所以,如果把上面那个例子中的 age = 3 改成 age = input(),这就说得通了。来自用户的输入是未知的,所以我才要分门别类的判断。这才是条件判断在实际使用中的用法。

当然,这里只是举个例子,并不是说改一下这个例子就变成好的使用场景了。一个好例子和一个坏例子从根本思路上就是不同的。

别人怎么写例子的我不知道,我自己在写例子的时候,看了大量源码,总结出来核心的几个使用场景。

比如说,条件判断这块,我总结了3个使用场景:值比较、看结果、猜有无。可以说,只要用到条件判断,就逃不出这3个场景了。

这里又不小心说多了,总之,找一份有使用场景的教程,你看完就知道学的东西在哪用了。

还是那句话,你学完不知道怎么用,不是你的错,一定是教程的问题,赶紧换。


总结一下,判断一份 Python 入门教程适不适合新手的3个核心要素:

  1. 鉴别要点1:这份教程是否支持 Python3?
  2. 鉴别要点2:这份教程是否把概念解释清楚了?
  3. 鉴别要点3:有没有概念的使用场景

这3点都满足了,才是好教程。


其他一些你以为重要的,其实不重要。

是不是写教程的人资历越牛逼,就越好啊?

真不一定,专家不一定是能体恤初学者的好老师,你要是找 Python 之父 Guido van Rossum 教你,他可能就从 Python 的垃圾回收处理机制讲起了。

是不是教程写的越长就越系统啊?

砖头厚的教程你看的完么?最重要的尽快练起来啊,在使用场景中理解基础知识。


可能有人会喷,别人都觉得这些教程挺好的,就你事多说看不懂,是不是没事找茬啊?是不是就为了推自己的教程啊?真不是。

在所有学科中,数学、英语,编程等等,就编程的教学年头最短。在教学上传承的越远的学科,在教学环节上就打磨得越好,可以让任何一个普通人学懂。

而编程是一个很年轻的学科,它还没有经历过一种可以被传承的教学模式,没有形成一个可以让任何人都能学会的教学方法。

所以说我做的事情,就是让编程的教学方法更成熟,让任何人都能学会编程。

也许我看起来像这个行业的搅局者,但实际上,即使我不出来也会有人做这个事情,因为编程这个学科会越变得越来越流行,也越来越成熟。

一定会的。


你还在低效努力吗?

用 Python 提升效率,4 小时工作 20 秒完成

《Python 效率 Up 计划》新课发布会,点击免费参加