程序员要生存,快速掌握新知识,得学会这6招
来源:麦叔编程
作者:麦叔
本文以Python为例,方法同样适用于其他编程语言。
都说“活到老,学到老”,这句话放在程序员身上是再合适不过了。因为软件开发技术每年都有更新。在过去的三年Python从3.7更新到了3.9,就更不要说层出不穷的第三方软件包以及它们的更新了。
所以作为一个程序员,最重要的能力就是学习能力。但也不用过分担心,因为底层知识变化是很慢的,比如我们用到的网络知识,几十年都没变化过。就算是最热门的人工智能,现在大家学习的大部分技术也都是十几年,甚至几十年前的技术。变化快的是上面的花架子。打好底层的基础,学会如何快速学习上层的花架子,其实吧,做程序员没那么累。
Python之所以强大,一个原因是它有丰富而强大的包,不管你想处理Excel,还是做人工智能,都能找到相应的包,直接拿来使用。我们掌握了Python编程基础知识后,剩下的就是快速学会使用这些包来解决自己的问题。
本文分享了我对学习新知识和新模块的压箱底的一些技巧。初学者如果能够掌握这些技巧,你很快就可以告别小白对阶段。就算还是小白,也是专业的小白。
文中模块和包可能会交替使用,它们是一样的意思。
一、必须的掌握的核心知识
为了能够有效的学习和应用下面的技巧,我们必须先掌握Python和编程的核心概念。
如上图中:下面绿色方块中的编程语言基础是我们必须先学好的部分,剩下的就是按需学习一个个模块。而左边黄色通用技术和高阶知识可以按需学习。
我们来看看那些是必须要先学好的知识:
程序的基本结构:表达式,语句,循环,分支,代码块。程序是由一个个语句组成的。有的语句就一行代码,如赋值语句;有的语句是一个甚至多个代码块,如循环语句和分支语句。语句中包含表达式。表达式表达了运算的过程,如算术运算,逻辑运算,函数调用等。总之,给你一段程序,你能熟练看懂它的结构。如果它的结构有问题,你能轻松的指出问题所在。
字面量,变量和变量类型代码中操作的数据要么以字面量的形式出现,要么是以变量的形式出现,而变量要先定义再使用,没有定义就使用必然会报错。看到变量要意识到他是否已经定义了,在哪里定义的,它的作用范围是什么。有可能同名变量在多个地方都定义了,要清楚的知道当前是那个变量。另外,时刻意识到任何一个变量都是有它的类型的,整数,小数,字符串,列表还是第三方包定义的类。类型决定了它有哪些方法。
函数和作用域清晰的理解函数的名称,参数,返回值等要素,以及变量的作用域。知道常用的Python自带函数,如len()等。有些函数来源于某个模块,有些函数属于某个类,有些函数是我们自己定义的。不管变量还是函数都有其使用范围,有它们所属的命名空间。
面向对象Python是一个面向对象的编程语言,我们要使用的各种Python自带的包或者第三方包大都是以面向对象的形式写的。理解类和实例的区别,以及相应的实例变量和类变量,实例方法和类方法等。
模块和包模块和包是Python组织代码的方式。熟悉import的几种用法。能熟练的使用pip安装,更新和卸载包。对于中国程序员,会配置pip的中国镜像站点。
在我的私教课程中,我把Python必须掌握的技能总结为Python36技,要掌握的就那么36招。剩下的就是使用这些技能去解决问题,学习花架子。如果你想系统的快速的学习,需要有人手把手指导你,可以来参加。有专业的指导,学的更快。
二、有问题,先问Python
写代码过程中遇到不会的问题,最好的方法不是问别人,也不是去搜索,而是问Python:在交互式Python中直接运行做尝试,Python会告诉你是否行得通,哪里有错。
记住:Python解释器才是你最好的老师,它24小时陪伴着你。
假设你想知道字符串是否可以相加。'你好' '麦叔' 能行吗?
这种问题根本不用去问别人或者去网上搜索,打开交互式Python,实验一下就知道了:
>>> '你好' '麦叔''你好麦叔'>>> '你好' - '麦叔'Traceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: unsupported operand type(s) for -: 'str' and 'str'>>> '你好' * 3'你好你好你好'>>> '你好' / 2Traceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: unsupported operand type(s) for /: 'str' and 'int'>>> '你好' * '麦叔'Traceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: can't multiply sequence by non-int of type 'str'
很快就可以实验出来,字符串加法是可以的,也可以乘以数字,但是减法和除法是不行的。
复杂点的代码可以写到文件中,总之用代码去测试,有问题,先Python。
自己没有试验过,没有问过Python,最好不要去问别人,尊重别人的时间。这是程序员应该具备的素养之一。
当然,这个技巧需要你对Python基础知识有一定的掌握,否则你都不知道怎么问Python。
三、问Python的3个命令
有3个python的命令(函数),一旦掌握,就打开了非常广阔的世界,基本具备了快速学习的能力。
1. type - 了解类型
在森林中,你看到一个动物,你的第一反应应该是:这是什么动物?因为知道了是什么动物,你就知道了它的特性,你就知道了应该赶快跑开,还是可以去亲近它。
在写代码中,在学习新包的过程中,我们也要知道这个包中主要有哪些类,当前处理的这个变量是什么类型,否则程序报了错你都不知道怎么回事。
使用type()函数可以了解变量的类型。比如下面的代码:
>>> import requests>>> res = requests.get('https://www.baidu.com')>>> type(res)<class 'requests.models.Response'>
使用requests.get()方法抓取百度的首页,返回的不是字符串,而是一个Response对象。知道了它的类型,我们可以深入研究Response对象包含哪些属性和方法。不管在搜索相关资料,还是讨论相关问题中,都会更加有效。
requests是什么呢?请记住,所有的变量和字面量都属于某个类型。
>>> type(requests)<class 'module'>
requests是一个模块,说的简单点就是一个python文件,里面定义了一些全局变量和函数。有哪些变量和函数呢?它的源代码在哪里呢?请继续阅读。
2. dir - 查看有哪些变量和函数
dir可以查看一个模块或者一个类中有哪些变量和函数,以requests为例:
>>> dir(requests)['ConnectTimeout', 'HTTPError',..., 'warnings']
dir返回一个list,里面包含当前类或者模块中的:全局变量,函数,类,子模块等。
假设你在学习用turtle包画图,不知道如何设置背景颜色,不知道如何移动。
import turtlet = turtle.Turtle()#如何设置背景颜色?如何移动t变量的位置?
可以用dir看看turtle模块有哪些函数:
虽然内容有点多,但仔细看一下可以发现:bgcolor就是用来设置背景颜色的;Turtle是turtle模块中的一个类,所以我们用turtle.Turtle()创建一个Turtle对象。接下来看一下Turtle对象有哪些函数:
仔细过一遍这些函数,就可以大概猜测到forward是向前移动,back是向后,而speed代表速度。这时候也可以写代码尝试一下。
这么多函数,看起来有点困难。可以使用pprint.pprint打印的好看一点:
>>> import pprint>>> pprint.pprint(dir(turtle.Turtle))['DEFAULT_ANGLEOFFSET', 'DEFAULT_ANGLEORIENT', 'DEFAULT_MODE', 'START_ORIENTATION' ....
dir返回的列表中包含了变量,函数,类等等。以算术模块math为例,我们可以通过下面的代码查看他们各自的类型:
>>> import math>>> pprint.pprint([(name,type(getattr(math,name))) for name in dir(math)])[('__doc__', <class 'str'>), ('__file__', <class 'str'>), ('__loader__', <class '_frozen_importlib_external.ExtensionFileLoader'>), ('__name__', <class 'str'>), ('__package__', <class 'str'>), ('__spec__', <class '_frozen_importlib.ModuleSpec'>),
通过type函数和getattr函数,可以知道dir返回的名字具体是什么类型,然后使用推导式生成一个新的列表。
这个过程也许看起来有点复杂,但一旦掌握了,你的自学能力就上了一个不小的台阶。建议多看几遍本节的内容。
3. help - 查看详细文档
通过help,可以查看函数或者类的详细文档:
>>> import turtle>>> help(turtle)
命令行会显示详细的turtle文档:
可惜这是英文的,建议大家尽量去阅读和学习吧。在命令行下按q就可以退出文档。
也可以查看一个具体函数的文档,下面来查看turtle包中的Turtle类的fd函数的说明:help(turtle.Turtle.fd)
这里就容易懂多了,不仅说明了函数的功能,还给了代码例子。
四、学会看文档
官方文档通常是最好的学习资料之一,下面讲解如何下载和设置官方文档。Python有中文文档,这可以解决前面英文看不懂的问题。
去Python的官方文档站:https://docs.python.org/3/
在网页的左上角,选择简体中文和Python版本
就可以看到各种文档了,初学者可以先看入门教程,有明确目的可以看语言参考或者标准库参考。
也可以在右上角搜索关键词:
如果网速慢,可以把文档下载到本地:点左边的下载链接:选择HTML格式下载:下载到本地后,解压文件夹,在里面找到index.html打开index.html就和在线使用一样了。你也可以把这个地址加到浏览器的收藏夹:
这样你就有了一个本地的Python文档网站,有问题先在这里搜索一下。
五、学习新的包
程序员之间有一句话叫做“不要重复造轮子”,意思是说你要解决的问题很可能有人已经帮你做好了,你只要拿来用就行了。在Python的世界里,就是找到合适的包。
1. 确定用什么包
以处理Excel为例,有很多处理Excel的包,有的可能是给老版本Python使用的。我们要花点时间确定那个包是最适合的。
最简单的方式是直接搜索一下,看看大家怎么说。搜索的格式建议为:Python 关键词 包
不要着急下结论,认真读完前面几个文章,看看大家推荐什么,这些不同的包之间有什么区别,适用于什么场合。耐心一点,这里花1个小时找对包,后面可以节省你几个小时,甚至几天的时间。假设我们确定要使用openpyxl,就可以继续下一步了。
2. 找到包的主页
确定了包的名字就可以去找到包的官方主页了。https://pypi.org是Python的包的大本营。上这个网站,搜索你确定的包的名字:
点击进入包的介绍页面:
可以看到除了基本介绍,还有一些代码参考,以及官方文档的地址。
3. 找到包的文档
查看官方文档是很重要的。有时候官方文档的链接可能在网页的左边栏。总之认真在页面上找到官方文档的地址,然后进入官方文档:
进入官方文档后,剩下的就是认真看文档的内容了。大部分包的文档质量都很好,包含了常见的用法和要解决的各种问题。有的甚至有中文的文档,认真在网页上找一下,看看有没有中文文档的链接。
也可以搜索一下,用谷歌搜索“openpyxl 官方文档 中文”第一条就是中文的官方文档。用百度搜质量就很差了,慢慢找也可以找到这个网站。
4. 运行文档中给的参考代码
接下来,尝试运行文档中给的参考代码,至少是前面几段最重要的参考代码,一步步走下去。走完以后,你就对这个包就有不错的理解了,可能已经知道如何解决你自己的问题了。
文档可能会很长,先大致浏览文档的主要内容。遇到具体的问题再回来看相应的章节也可以。比如openpyxl的文档就提到了关于性能的,关于numpy的话题。这些你可以等到有了相关问题再回来看。
六、看源代码
学习一个模块,更高点的境界是直接看它的源代码,你甚至可以为了去修改它的源代码。
使用__file__属性可以找到源代码的所在地:
>>> turtle.__file__'/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/turtle.py'>>> import openpyxl>>> openpyxl.__file__'/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/openpyxl/__init__.py'
Python自带的函数和部分模块是用C语言写的,无法看到Python的源代码。