人生苦短,我用 Python 。
人们做一件事往往出于或多或少的利益。就比方讲,义务教育提倡学生学习英语,可能因为英语是全球最通用的语言,如果学会英语的听读写,遇到需要英语交流的地方自然不在话下。那说到 AI 这一行,选择何种编程语言也不例外。下文将侧重从 Python 的几个主要优势展开,讲述为何 Python 适合作为 AI 的基础编程语言。
太长不看版:
- Python 是开源、免费的编程语言,力求普及和高效协作。
- Python 语法简洁明了,写起来更省事,读起来也更方便。
- 得益于自身的特性,Python 成为从事数据处理和机器学习人员的首选。
- 已有的 AI 支持库让开发者无需关注底层,而只需把重心放在实现上,开发效率明显提升。
I. 编程语言之争:Python 的定位
Python 的战略定位是什么?其实很简单,就是要做一种免费、简单易用却又专业严谨的通用编程语言,或者叫胶水语言。期望普通人也能轻松容易地上手,把各种基本的程序元件拼装在一起,并且保证协调运作。
然而Python并非生来就是AI编程的首选。从 1989 年底 Guido 缔造这一语言开始,到机器学习正式崛起的 2013 年的二十几年间,Python 并没有成为 AI 研究员的一把扳手。但凭借其出色的特性,而后在几年 AI 呈现井喷的态势下,迅速就抓住了人们的眼球和持续关注。如今就连非从事技术人员都在问,“ Python 是什么?”
编程语言 | 免费 | 社区活跃 | 快速开发 | 语法简约 | 面向可视化 | 学习曲线 |
---|---|---|---|---|---|---|
C++ | ✔ | ✔ | 陡峭 | |||
Java | ✔ | ✔ | ✔ | 一般 | ||
Matlab | ✔ | ✔ | 陡峭 | |||
R | ✔ | ✔ | ✔ | ✔ | 一般 | |
Python | ✔ | ✔ | ✔ | ✔ | ✔ | 低缓 |
除 Matlab 属于付费性质外,其余编程语言都是免费使用。从成本的角度考虑,多数公司会倾向于选择免费可靠者。R 在统计应用领域占有一席之地,然而普及率不及另外几门语言。实际上,C++ 、Java 和 Python 是 AI 开发最常用到的三门语言。
II. 表达方式:简约易懂
假设一个例题,
已知 x * y = 32,x 和 y 都是正整数,且 y 为 x 的两倍,试求 x 和 y 的值。
不考虑解方程的效率,可能的实现方式如下(关键代码):
- C++
1 | # include <iostream> |
- Java
1 | public class Test { |
- Python
1 | # found 用于标记是否解出方程 |
- 运行结果:
1 | The answer is: x=4, y=8. |
简单解读一下解方程的代码:
我们给定范围1~根号z(z为32)
,让计算机通过不断举出范围内的每个整数,并通过式子z - x * y(x为范围内整数,y是x的2倍)
判断是否解出方程——若满足小于 0.01 ,方程解出,输出 x 和 y ,否则输出“未在范围内找到方程的解”。
计算机求解未知数的本质是运用穷举法。穷举法的求解效率依赖问题本身的规模大小和计算资源的多寡,因此我们常接触到的求解器大多经过了算法(逻辑上的)优化。此例为未经优化的代码。
从上往下看,Python 的代码量是三者中最少的,在开发方面一定程度上减少了代码的维护成本。另外,无论是range(范围)
,print(打印)
,not found(未找到)
这些极为贴近人类语言的描述,还是类似z = 32
这样简洁了当的描述,Python 的代码都足以给人一种更亲近的感觉。而其他编程语言的语法稍显啰嗦,在无形之中增加了理解的负担。
举例 | C++ | Java | Python |
---|---|---|---|
声明变量(基本类型) | bool isPrime = false; |
boolean isPrime = false; |
is_prime = False |
声明变量(容器) | std::vector<int> nums = {1, 2, 3}; |
Vector nums = new Vector(3); nums.add(1); nums.add(2); nums.add(3); |
nums = [1, 2, 3] |
定义函数 | bool isPrime(int num){ ... } |
boolean isPrime(int num){ ... } |
def is_prime(num): ... |
使用库 | # include <math.h> |
import java.lang.Math |
import math |
调用库函数 | std::sqrt(num); |
Math.sqrt(num); |
math.sqrt(num) |
Python 给人以一种更像是“用尽可能直接简单的方式把事情做了”的感觉。
III. 巨人肩膀:丰富强大的资料库
做机器学习和深度学习必然躲不开数据处理。Python 就有许多擅长处理大量数据的库,例如 NumPy 和 Pandas, 这两个库都做了并行化处理来提高运算效率。配合自带的容器类型list、set、dict,数据的处理更加方便、快捷。
站在巨人的肩膀上,可以帮助我们望得更远。感谢那些辛勤的贡献者, 我们可以不需要关注算法在底层是如何实现,而只需把工作重心转移到业务的层面上。这么一来, AI 项目的开发效率自然就提升上去了。夸张点讲,好比是用硅和金属和用电子元件制造出一台计算机的差别。
用途 | 模块 |
---|---|
图像处理 | PIL, SciKit-Image |
文本处理 | NLTK, JieBa, SnowNLP |
科学计算 | NumPy, Pandas, SciPy |
机器学习 | SciKit-Learn, TensorFlow, PyTorch |
可视化 | MatPlotLib, Seaborn |
开源社区的理念,驱使无数与 AI 相关的爱好者和研究人员贡献自己的智慧,让功能代码不断得以复用、完善和扩展。愿你在汲取养分,飞速成长的同时,献出你的才华来反哺开源社区,让它变得更加美好。
IV. 写在最后
总的来说,Python 是一种能让学习代价最小化的同时,将脑中想法尽快翻译成代码的载体。然而,编程语言无非只是一种工具。工具在于用,若非立志成为代码诗人或者语言大师,切忌过多琢磨!