我接触 Python 并不算早,第一次使用 Python 写生产系统的程序是2004年,那时候我已经有了几年的编程经验。当然了,现在这年头说早晚都不合适,昨天我说2000年就开始使用 Vim 编程了,有小伙伴回复,那年我才12,这……多少有点尴尬。

早期用 Python 主要写一些服务器端的工具,后来也写后端服务,再后来还写过内容抓取、数据分析和 Alfred 的插件等一系列杂七杂八的东西,简单的工具用 Shell 写,复杂的和庞大的用 C 或 Java 实现,中间的三不管地带,用 Python 就好,每次都不会让你失望。2005到2006年那段时间我参加了一个类似 Corba 的分布式应用系统的开发,与国外的程序员合作,写了大量的 Python 代码。

Python 有什么好处?功能强大,使用简单,语言唯一性的特征明显(唯一性的意思就是你不能用十八种写法实现一个功能),而且具备海量的第三方库……Python 程序员最爱说的一句话是:人生苦短,我用 Python(也是 Python 之父的名言)。这句话与「PHP 是世界上最好的编程语言」一样并世无双,可谓「倚天不出,谁与争锋」。

Python 支持交互式编程、面向对象编程、函数式编程、面向切面编程、当然还有元编程。目前这门编程语言在兵器谱的排名是第四,前三位分别是Java、C 和C++。江湖上人称四哥的,就是 Python。

Python 起源

Python 之父是 Guido van Rossum,荷兰人。每个编程语言的作者都是一个技术传奇,Guido 也不例外。他1982年从阿姆斯特丹大学毕业,获得了数学和计算机两个硕士学位,最爱做的事情就是编写代码。那个时代,流行的语言是汇编、C、Fortran 等,这些语言要求编程者对计算机的运行机制有精确的了解,以充分利用硬件资源达成自己的目标,因为硬件资源实在是太匮乏和宝贵了,程序员们需要榨干计算机硬件的每一滴血和汗才能完成任务。

这给 Guido 带来很多困惑,用 C 实现个功能吧,完成度没有问题,但是需要耗费大量时间。用 Shell 吧,面对复杂问题又束手无策。Shell 是 Unix/Linux 下的脚本语言,也叫胶水语言,它可以把系统的各种功能通过管道(比如:find . -name “*.java” | xargs grep chjq)的方式连接起来实现系统运维、定时任务、文件处理、程序安装卸载等工作,但是处理复杂的数值运算或系统调用就很麻烦。这时候需求就来了,Guido 希望一门语言既能像 C 语言一样能够全面掌控计算机的资源,也能像 Shell 一样使用简单,还具备交互性编程能力,轻轻松松编写一些小的工具包。

普通人 —— 比如我 —— 有了这种需求就会对自己说,再等等,也许隔壁冯老师会做出来呢。冯老师的想法就更简朴了,我又不写代码,关我什么事。幸好 Guido 没这么想,Guido 对自己说的是,放着我来!

1989年的冬天,Guido 为了度过一个有意义的圣诞节,或者为了打发一个无聊的假期,开始编写 Python 语言的编译器和解释器,灵感来自教学语言 ABC(你不知道还有这种语言吧)。为什么叫 Python?因为 Guido 很喜欢 BBC 电视剧 —— 蒙提·派森的飞行马戏团(Monty Python's Flying Circus)。ABC 则是由 Guido 参加设计的一种教学语言。Guido 一直认为 ABC 这种语言非常优美和强大,是专门为非「专业程序员」设计的。但是 ABC 语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido 决心在 Python 中避免这一错误,这一次他成功了。

1991年,第一个 Python 版本诞生,编译器是 C 语言实现的,Python 语言可以非常方便的调用 C 语言实现的库(这一点太重要了)。从一问世,Python 就是一个动态语言,面向对象编程的语言,具备类、函数、异常处理、列表(list)、词典(dict)、元组等数据类型。

Python 的语法同时受到了 C 和 ABC 语言的影响,比如采用 def 来定义函数,比如等号赋值,比如强制缩进。如果你是个 C 或 Java 程序员,习惯了用大括号来划分程序域 —— 其实大部分语言都是这么做的 —— 看到 Python 是用缩进来搞定这件事,你马上会觉得「Holy shit」,其实这种做法来自 ABC,Guido 的想法是,如果「常识」上确立的东西,没有必要过度纠结。当然,这种常识是 Guido 的常识,至于其他人,你们会习惯的。

事实也是如此, Python 吸引了大量的程序员,他们开始协同改进这门语言,Python 开始了改变世界的征程。

2000年10月16日 Python 2.0 发布,这次增加了实现完整的垃圾回收,并且支持 Unicode 编码。Guido 在开发的过程中一直遵循了开放的原则,社区协作的模式从最初的邮件列表改为开源的方式,Python 吸收了大量开发者和编程语言的特点,比如,Python 中的正则表达参考了 Perl,而内置函数 lambda,map,reduce,filter 等则参考了 Lisp,无数优秀的程序员为 Python 添砖加瓦,Python 搞不定的,没关系,我们用 C 实现,于是 Python 有了大量的函数库,尤其在数据分析和科学计算领域。另外,函数在 Python 中是一等公民,所以 Python 同时也是一种函数式编程语言。

Python 稳步发展,成为了一代老牌编程语言。

Python 的应用

每个编程语言都有自己的 Hello World,Python 最为简单。如果你有台 Mac 电脑,Python 的 SDK 是默认安装的。打开终端,输入 python 进入 python shell 的交互界面,然后键入>>> print “Hello World”

程序写完了。

Python 这么简单,是不是一门玩具语言呢?当然不是。NASA 的火箭发射仪表盘系统使用了 Python 的 Tkinter —— 支持实时响应的 GUI 库。NASA 的太阳物理学分词库 SunPy 也是基于 Python 写的。YouTube 基于开发速度的考虑,大部分代码是 Python 实现的,YouTube 的流量有多大,老百姓不知道,程序员应该知道。Google、Dropbox 更是大量采用 Python 语言(Guido 工作过的两个地方)。国内的豆瓣、知乎也是 Python 的重度使用者。

虽然 Python 已经被广泛使用了,但前几年它在兵器谱上总是排 8-12 的位置。最近两年事情开始发生变化,去年 Python 开始迅速攀升至第五名,今年更进一步,排名第四。为什么会发生这种变化呢?并不是 Python 增加了什么了不得的特性,而是人工智能和机器学习的时代来临了。

AI 时代的 Python

我来做一个不负责任的判断,Python 将成为大数据、AI 和机器学习时代的第一编程语言。可以想象这样一个场景,Python 和 Java、Go、C、C#、Ruby、PHP……坐在圆桌前开会,Python 抱着头后仰在 Herman Miller 工程椅上,慵懒的对其他编程语言说:对不起,我不是针对你,我是说,所有在座的各位,都只能挣第二。

当然了,这个语言范畴是限定在大数据、AI 和机器学习领域。但是,如果这个领域在未来的应用足够广泛,那 Python 直接灭掉 Java 当大哥也不是不可能的。

Python 性能这么差,对多核并发编程支持的也不好,并且长期分裂成了 Python 2 和 Python 3 两个阵营,给开发者带来了诸多不便和麻烦,为什么能后来者居上呢?

因为 Python 遵循了现代的木桶原理。

Python 的木桶原理

我在自己的小密圈(目前已经涨价到128元,因为贵即是好)提了一个问题:为什么很多数据分析和机器学习的框架都会选用 Python 做主要的开发或首选支持的语言呢?

一位女程序员颖儿的回答最靠谱:免费,简洁,生态好,库丰富,操心少;之前刷机器学习的题,用 C# 写了一坨儿。结果人家引个 SciPy 库,三行代码搞定。

SciPy 是一个数值计算库,NumPy 是 Python 另一个开源的数值计算扩展库,Pandas 是基于 NumPy 的数据分析工具,matplotlib 是图形绘制库,最近火热的 Scikit-learn 则是开源的机器学习框架。这些库对于 Python 来说就三个字:「随便用」。长此以往,围绕 Python 语言构建出来的生态库让其他语言望尘莫及,尤其是在科学计算、数据分析和机器学习领域。

以前我们说「木桶原理」是讲一只水桶能装多少水取决于它最短的那块木板,所以我们应该去思考和补齐自己的短板,才能成事。到了现代,知识爆炸信息拥堵,没人有时间去补齐短板,能够让自己的长板足够长就不错了。短板怎么办,找别人来补齐啊。能协作的组织和人才是最有生命力的。

Python 也是一样。自诞生以来,一直保持了简单、开放、语言工业化,具备良好的封装、组合、嵌入能力,开发效率惊人。Python 把这些方面做到极致,其他的事情,留给别人去干嘛。

你们不是觉得 Python 慢么,自然有人给开发出 PyPy、Cython、Jython、Numba 这样的编译器工具来提高 Python 的效率。要进行科学计算、大数据分析,好了,SciPy、Pandas 诞生了,要机器学习,scikit-learn、Theano、Pylearn2 等机器学习库开发出来了。Python 调用这些用 C 或者 Fortran 开发出来的库比原生语言调用还方便,你说大家能不用 Python 么?

每当新事物来临的时候,总有很多专家里手对新手们竖起一道高墙,比如机器学习总被放到学术研究和 CS 科班出身这堵墙的后面,让人望而生畏。其实,机器学习这个领域,同样是个金字塔,这些专家和博士以及人工智能算法的创造者们,属于塔尖的极少数人,他们发现原理,实现算法,引领潮流,突破极限,然后呢?基于这些算法和原理开发应用和使用应用的,是广大的程序员和人民群众,他们可能没有那么高深的数学知识,不知道 Regression 和 Decision Tree 算法,不了解散布矩阵……那我们可以用 Python 调包啊,只要那些包足够成熟就好了。

也许未来每个人与机器沟通的每一句话,就是唤起了一段 Python 代码呢?

Python 的分裂

Python 2 和 Python 3 已经长期共存了数年之久,原因很复杂,对于这个话题,足够写另一篇文章了。目前官方表示对 2 的支持到2020年,但 2 的生态库远远大于 3,这就让人很纠结。

关于该学哪个版本的常见问题,我的回复是,最好都学,语法区别并不是很大。

人人都应该使用Python!

文章来自公众号「MacTalk」,请搜索关注。

人生苦短我用python谁说的_人生苦短,我用 Python相关推荐

  1. python你的人生_人生苦短:运行你的第一个 Python 脚本

    Shell 是一个Read-Eval-Print-Loop(REPL),它只接受命令,评估它们并打印输出. 我会假设你已经安装了一个有效的Python解释器,已经准备运行你的第一个Python脚本. ...

  2. python新版下载安装_各种版本的Python下载安装教程

    python从17年开始大火,自然想学python的同学就多了,小编整理了这篇文章,从python的功能介绍.各系统最新版本python下载.python全部版本下载.python下载后安装教程以及p ...

  3. python的知识点运用_程序猿在Python编程中不得不使用的十二种基础知识

    Python编程中常用的12种基础知识,其中肯定有你不会的! 人生苦短,我用Python 1.正则表达式替换 目标: 将字符串line中的 overview.gif 替换成其他字符串. 人生苦短,我用 ...

  4. 高考python必考题目_假如高考考python编程,这些题目你会几个呢?

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  5. python可移植性强吗_你真的了解Python吗?本文可以让你更深度了解Python

    人们为什么使用Python? 之所以选择Python的主要因素有以下几个方面:软件质量:在很大程度上,Python更注重可读性.一致性和软件质量,从而与脚本语言世界中的其他工具区别开发.此外,Pyth ...

  6. python下载无法安装_各种版本的python下载安装教程

    关键时刻,第一时间送达! 先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明明只是灵武七重,而在这两个月不到的时间,连跳两重修为,又跳过一个大境界,踏入了元武一 ...

  7. python怎么打日志_怎样调试 日志 python 代码

    展开全部 使用 pdb 进行调试 pdb 是 python 自带e5a48de588b662616964757a686964616f31333361306366的一个包,为 python 程序提供了一 ...

  8. c++中的引用和python中的引用_对比 C++ 和 Python,谈谈指针与引用

    作者 | 樱雨楼 引言 指针(Pointer)是 C.C++ 以及 Java.Go 等语言的一个非常核心且重要的概念,而引用(Reference)是在指针的基础上构建出的一个同样重要的概念. 指针对于 ...

  9. python常用库教程_这几个python常用的库你必须知道!

    随着人工智能时代的到来,python变得更加流行.受欢迎,功能强大.简单易学.容易入门.应用广泛等,掀起了学习热潮,现在越来越多人转行都会学习python语言.为了让大家快速掌握python,今天为大 ...

最新文章

  1. Mybatis的parameterType传入多个参数
  2. 【NLP】一份相当全面的BERT模型精讲
  3. 新版本springboot-springboot与springcloud理解误区
  4. HDU2021多校第五天 1009 Array-树状数组求二阶前缀和
  5. 深度强化学习-Actor-Critic算法原理和实现
  6. gulp教程之gulp-imagemin压缩图片
  7. 3D数学之矩阵的各种求逆
  8. 树算法系列之四:XGBoost
  9. 突袭HTML5之SVG 2D入门12 - SVG DOM
  10. 基于javaEE的房产中介管理系统
  11. 英文系统下手工安装五笔86版
  12. Odroid XU4学习笔记
  13. sql 累计占比_sql 面试题(难题汇总)
  14. 模仿人类逻辑,首个BERT模型AI通过初二科学考试!研究人员:完成了老板遗愿...
  15. C#按汉字拼音首字母排序
  16. Producing Snow
  17. 升级笔记本硬件并安装Debian的过程
  18. java tr合并单元格_java poi合并单元格问题
  19. 中医测试体质的软件,中医体质测试系统,中医九种体质测试,在线测试中医体质,中医体质自测...
  20. #入坑keychron# 那些年用过的机械键盘之keychron

热门文章

  1. 打印讲义中的幻灯片编号(O365新功能)
  2. Qt 之QWebEngineVie框架简介及加载网页方法
  3. ConcurrentLinkedQueue的offer方法
  4. 自动档车正确起步、停车的权威做法
  5. 【网络】 OSI网络模型概念
  6. jdk不是有效的win32程序怎么办
  7. 小红书笔记选题技巧,3个方法论批量打造爆文笔记
  8. matlab text字是竖着的,iOS - Label文字竖排
  9. 用PS如何把图片调出时尚杂志色
  10. 中科蓝讯蓝牙: DownLoader下载调试及串口模块注意事项