前言
2015年,本科毕业的那个暑假我开始疯狂的投递简历,希望找一份数据分析与数据挖掘相关的实习工作。直到有一家公司的面试官问到我:“你会Python吗?”。我当时一脸疑惑,因为,大学期间只系统的学习过C语言,后期开发系统中用到过少量的C#。于是我问面试官:“你能给我拼写一下这么语言的名字吗?”。多年之后回想起来还会觉得很尴尬,真的是孤陋寡闻。
从那以后,“Python”这么语言经常出现在我耳边。读研之后我开始之后我主要研究的方向是传统目标识别和图像处理,主要使用的语言就是C++和Matlab,所以Python在我读研第一年并不是主力工具。研二开始后我开始进入深度学习这个领域,开始用到很多第三方的工具包,例如caffe、tensorflow已经CNN,那以后开始以Python语言为主。
因为之前有一些编程基础,在加上当初面试实习时时间紧迫,所以我就抽了一天的时间把Python基础教程看了一遍,了解了基本用法之后就成功的面试上了一份实习工作。那时候我认为Python是简单的,因为它不像C++、Java那样有严格的语法规范、有变量类型的概念,你只需要记住缩进正确即可。而且在做自然语言和计算机视觉过程中很多部分的代码都是依托第三方工具包完成,真正自己开发的只是一些数据预处理、文本处理以及用一些条件循环语句对逻辑进行串联。
直到后来从事工作以后,做了更多有严格交付要求的项目之后才发现,Python并没有想象的那么简单,“会用Python容易,用好Python不易”,这是我使用几年Python之后的感触。
当你做一个项目要考虑到代码的复用性、易读性、运行效率、后期维护成本以及面对一些复杂的数据结构时,你会发现Python绝对不是简简单单利用那些基本知识能够实现的。
这也是我开始这个系列分享的原因,第一:把自己开发过程中的一些心得和经验总结下来。第二:如果能够帮助更多的Python学习者,那就更加荣幸了。
为什么要用Python?
近几年唱衰Python的声音不绝于耳,有些人是的确发现并感受到了Python的缺点,但是更多的人是跟风式的唱衰Python。“Python效率低”,很多人都这样说,这显然有一些以偏概全的感觉,如果做游戏、软件,Python的确不占优势,但是如果作为算法工程师,进行算法验证,我想没有几个人会选择C/C++。口说无凭,先看几组数据对比。
PYPL
通过分析在谷歌上搜索语言教程的频率,创建了编程语言索引的PYPL流行度。
首先看一下PYPL最新编程语言流行程度,
Python居于第一,力压Java、JS、PHP这些名气非常大的编程语言,而且前10名中2~9名都出现了负增长,而Python却4.5%的正向增长率。
如果觉得一个平台不够具有说服力,可以再看看另外一个知名的编程社区的排名。
TIOBE编程社区
TIOBE编程社区指数是编程语言受欢迎程度的一个指标。该指数每月更新一次。这些排名是基于全球熟练工程师、课程和第三方供应商的数量。流行的搜索引擎,如谷歌,必应,雅虎!美国、维基百科(Wikipedia)、亚马逊(Amazon)、YouTube和百度被用来计算收视率。值得注意的是,TIOBE索引不是关于最好的编程语言,也不是编写大多数代码行的语言。
来看一下TIOBE社区7月的编程语言排名,
Python仅次于Java和C,排在第三名,而且对比去年同期,前10名中Python增长速度最快,达到2.9%。
从这里可以看出,Python一直被唱衰、一直很坚挺,尽管几年量关于Go、julia、Rust的呼声很高,但是依然无法撼动Python的地位,而且这些编程语言到底好不好用?有没有炒作的成分在里面?现在还是一个问号。
话说回来为什么Python如此受欢迎?
我认为存在的即是合理的,如果它真的一无是处、漏洞百出,是经不住众人的考验的。它之所以如此受欢迎,自然有很多吸引人的方面:
- 简单易用、节省时间
- 丰富的第三方工具包
- 强大的社区
- 应用场景丰富
其他三个方面暂且不说,就说一些第一点,简单易用、节省时间,我觉得有这一个理由就足以吸引很多人。尤其是对于算法、测试等岗位,真正的耗费心思的并不在编程、开发这一块,编程语言是用来验证算法的可靠性的,但是没有这个编程语言,自然无法验证,这就体现出有一个简单易用的语言有多么重要了。
吴恩达在《机器学习》这么课程里提到“硅谷的工程师大多数都会选择一个简单的编程语言对自己的算法进行验证,当确认有效之后会用c/c++等语言重新实现一遍”,这足以体现Python语言简单易用的优点。
Python距离第一个版本发布以及有28年,唱衰的言论从未间断,但是依旧坚挺。
尤其是机器学习的大规模应用、国家把人工智能智能技术上升到战略层次,使得Python成为独树一帜的编程语言,虽然这两年Go、Julia号称性能更好、更加易用,但是一直无法撼动Python在机器学习领域的地位,很难望其项背,为什么?我认为最主要的原因就是拥有强大的用户基础。现在在大多数企业,从事算法相关岗位的清一色的使用Python,更别说计算机视觉、自然语言这些强依赖Python第三方库的方向。
Python该怎么学习?
我认为大多数编程语言的学习都可以简化为3个过程:
- 入门
- 进阶
- 强化
入门阶段网上的教程已经很多了,关于入门我个人是不推荐参加培训班的,因为就如同前面所说的那样,Python基础语法非常简单,尤其是有一些C、Matlab、C++等编程基础的同学来说,Python中的很多概念虽然和恰语言不是完全相同,但是相似度还是非常高的,可以达到触类旁通。我个人更倾向于使用在线教程,这里推荐两个不错的入门教程,
菜鸟教程
https://www.runoob.com/python/python-tutorial.html
廖雪峰Python
https://www.liaoxuefeng.com/wiki/1016959663602400
强化阶段我认为需要在实际的项目和工作中去得到提升,就如同计算机视觉、自然语言处理一样,你从文章和练手项目中所能获取的只有那么多,如果像进一步得到升华就需要在项目中去面对困难、解决困难,这时候就会想尽方法去解决各种难题,不知不觉中会得到很大的提升。
本系列的主要目的是介绍进阶阶段,讲解一些Python的高级用法,对于入门和强化阶段自己可以私下完成。
书籍推荐
如果时间比较充足,我觉得可以系统的看一些Python书籍,因为书籍的严谨性和条理性更加有保障,在这我推荐3本我个人认为不错的书籍,
1.《Python编程 从入门到实践》
如果时间有限,我认为入门阶段可以通过菜鸟教程、廖雪峰Python进行学习。如果时间充足,我认为可以看一下入门书籍,因为更加严谨一些。
《Python编程 从入门到实践》是一本比较适合入门的书籍,环境配置、变量、列表、if语句、函数等基础的概念都会详细的展开介绍,这对于没有编成基础的同学非常有帮助。
2.《流畅的Python》
这是一本经得起考验的Python书籍。
它和大多数书籍和在线教程蜻蜓点水式的讲解不同,它更加深入,深入而不冗余,在你看这本书的时候你会发现,它的每一段话都是有意义的,没有什么废话。
它分别从数据结构、字典集合、文本和字节序列、函数、设计、装饰器、闭包等讲起,然后对每一块知识进行展开,详细介绍里面最根本的原理,然后告诉你,该怎么用好它,高效的使用它。
举一个最简单的例子,在绝大多数教程都会讲到循环和条件语句,千篇一律的告诉你"if..else..", "for...while",这个有一点编程语言的同学都知道,但是在Python里面循环和条件语句有什么特殊的地方吗?该怎么用好它?
《流畅的Python》这本书就教你怎么去使用它,告诉你列表推导该怎么用还有它的意义所在。
这就是这本书的优点:不仅告诉你怎么用Python,而是告诉你怎么用好Python。
3. 《Python CookBook》
学而不精的同学都会认为Python是一门很简单的编程语言,不错,Python相对于Java、C++要简单很多,没有严格的语法结构、没有变量类型,而且如果有一些编程基础去学Python的话可以一个周甚至一天即可学完。
但是我认为,Python入门简单,但是用好并不简单,当你接触到标准的商业项目时你就会意识到Python高级用法的重要性以及它的价值所在。
《Python CookBook》这本书就是这样的一本进阶教材,它不同于大多数教程,反复的介绍基本语法,它直接跳过基本语法开始讲解数据结构、算法、迭代器、生成器、类、对象、元编程等,我认为这些才是工作中真正有价值、拉开差距的地方,而那些基本语法是默认应该会的。
《Python CookBook》会在每个知识点开始提出一个应用场景,然后告诉你怎么去解决这种应用,同时会编程实现,这样对于提升Python是最为实际的,而且让你更加容易理解它这样用的价值所在。
这本书不仅有出版的书籍,也有免费的在线教程,需要可以看一下。
https://python3-cookbook.readthedocs.io/zh_CN/latest/preface.html