【原创文章】欢迎正常授权转载(联系作者)
【反对恶意复制粘贴,如有发现必维权】
随着人工智能的火热,Python越来越受到关注,越来越多的人加入到Python学习中。相信如果有教程的“加持”话,绝大部分人学会肯定不是什么大的问题。==最怕的是自己一开始就学错了方向,浪费了大把大把的时间。==
举个例子,你最开始是学习Python来进行人工智能开发,教程前半部分讲的是基本语法等等,完全符合需求,结果后半部分却是针对web开发的。这个问题真的很普遍,尤其是对于刚刚入门的小白来说,很多人都学完了都没反应过来。
我遇到很多人就是这个情况。
小白:我想学习Python,以后搞人工智能,现在很火的
我:很好呀,有很多教程书籍,上手很快的。
。。。
过了2周,小白学的是真的快,直到他问了我一个问题,我意识到了问题
小白:诶~师兄,那个Django我怎么装不上呀?这书是不是写的不对呀?你帮我看看呗。
我:你不是要学人工智能吗?怎么改web开发了呢?。。。
小白:这些不是人工智能必须的???
为什么要在写这个系列教程开始前,强调这个问题呢?因为实际的经历告诉我这个真的很重要。把握住学习的关键点能节省大量的精力来加深我们真正关注的研究。因此,推荐想要学习Python的小白仔细研究一下自己想要学什么,有方向有目的的去学。
个人认为最快速最高效的Python学习方法:
- 确定开发方向,这也是本文的目的。
- 学习基本语法,只需了解基本语法、数据结构,能够分清代码中的各个区块,其他不作深入研究。
- 上手实践项目,一个项目一个项目的学习,此时遇到不懂的语法问题、数据结构问题再详细的了解学习。
下面进入今天的正题。
1. 什么是Python?有什么特点?
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。
解释型:相对于编译型语言(C语言、C++等)存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。通俗的讲就是“边翻译边执行”,因此效率相对低,但跨平台性更好。
面向对象:相对于面向过程语言(C语言)存在的,面向对象语言的代码复用性更高,代码管理维护更简单。
动态数据类型:相对于静态数据语言(C++等)存在的,静态类型语言中,变量具有类型,而且在编译期确定,具有某一类型的变量只能持有相同类型的数据。动态类型语言中,变量没有类型,只有数据有类型,变量可以持有任意类型的数据,只有在运行的时候才知道数据的真实类型,优点:更加灵活多变。
高级程序设计语言:面向用户的、基本独立于硬件环境外的程序设计语言。Python语言相对于C++等更“高级”,可读性更好,开发效率也更高,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行,但代价就是Python执行效率相对较低。
2.Python可以做什么?
上面这张图片将Python开发的主要方向罗列了一下,Python主要用于以下几个方向的开发:
(1)人工智能
得益于Python良好的开发效率及大量开源的人工智能开发框架,Python在人工智能领域的应用可以说是垄断性的;大部分的研究机构和公司在开发过程中都使用Python。
如果致力于人工智能方面的学习,需要注意目前人工智能主要在计算机视觉、自然语言处理以及数据挖掘三大领域具有较好的应用,学习的时候建议挑选一个领域学习,如果都感兴趣,那还是基本了解一个之后再研究其他的。这里给大家推荐一些后期学习的Python库:
-
numpy ---- 主要用于数据处理,包括大型矩阵运算等。
中文文档:https://www.numpy.org.cn -
TensorFlow ---- 谷歌开发的基于静态计算图的人工智能算法库,2.0后支持动态图。
中文社区:http://www.tensorfly.cn -
PyTorch ---- Facebook开发的基于动态计算图的人工智能算法库,与TensorFlow并称“双雄”,建议挑一个学。
官方中文文档:https://pytorch.apachecn.org -
Paddle ---- 百度开发的“飞桨”,优点是全中文文档,感兴趣可以研究一下。
官方文档:https://www.paddlepaddle.org.cn -
opencv ---- 开源图像处理库,如果研究图像处理方面的人工智能,那基本绕不过它了。
官方英文文档:https://docs.opencv.org
(2)数据分析与处理
现在比较受欢迎的数据分析与处理语言是Java与Python,Java在大数据处理方面还是比较倾向软件应用与网站数据,包括游戏数据处理,特别是金融服务数据处理,一直都是Java的强项;Python有着众多免费科学算法库,优势在人工智能大数据处理,当然也有使用Python在银行的基础架构中处理财务数据。
由于本人对大数据爬取及分析处理不甚了解,这里不介绍大数据处理方面的内容,这里仅简单介绍一些日常学习研究过程中用到的数据处理及可视化的Python库。
- numpy ---- 上文已介绍。
-
pandas ---- 一种 "表格式"数据管理计算库,Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
中文手册:https://www.pypandas.cn -
matplotlib ---- 一个Python 2D绘图库,广泛应用于数据的可视化。
中文手册:https://www.matplotlib.org.cn
(3)Web开发
Python超高的开发效率使得其也非常适合web开发,Python有上百种Web开发框架,有很多成熟的模板技术,这里简要介绍几种。
- Django ---- “Web框架界的变形金刚”,Django的MVT架构、自带ORM、强大的Admin后台管理、自带数据库、还自带开发测试用的服务器、不得不说服务周到。如此大而全,重量级的Django给开发者提供了超高的开发效率。
- Flask ---- 相较于Django ,Falsk属于轻量级Web框架,特点是自由、灵活、可扩展性很强。很适用于开发小型应用、开发大型网站也没有压力,自己设计架构、选择合适第三方扩展,各方面性能完全不输Django。
- Tornado ---- 全称是Torado Web Server,可用作Web服务器,同时也是一个Python Web的开发框架。Tornado 走的少而精的路子,除了Web开发需要的基本模块,剩下的则都需要开发者自己扩展。
(4)可视化桌面软件
相较于C++,Python执行效率相对较低,可视化并不是Python的强项,但并不是说Python就完全不适合作为可视化软件的开发,对于计算量不大、时间不敏感的需求,Python是一个不错的选择。例如,在科学研究过程中,可视化的桌面软件有着巨大的作用,良好的用户可视化可以大幅提高研究效率,减少过程中不必要的错误,而Python上手简单开发效率高,研究人员可以使用Python快速搭建可视化的桌面软件实现自己的需求。
这里介绍一款功能强大,上手极快的可视化开发Python包:
-
PyQt ---- Qt的Python版本,与C++版的Qt在函数的使用方法上基本一致。有PyQt4及PyQt5的区别,个人建议使用PyQt5。优点:底层实现基于C++,拥有很高的执行效率,可以轻松满足研究过程中的基本需求;其次是它有很多通用工具可以使用,可大大提高开发效率。
官方文档:https://doc.qt.io
下图就是我在做摄像机标定研究时开发的一个可视化桌面软件。
(5)其他用途
除去上述的主要用途,Python在其他领域也有着重要的应用。其极高的开发效率,使得使用者可以快速实现自己的需求。在开展一些简单的重复性工作时,可以使用Python大幅提高劳动率,例如:大量的文本及表格数据处理。