1.1.3 为什么选择Python进行运维
为什么选择Python作为运维方面的编程语言呢?网络上不乏已经开发好的运维软件,但是运维工作复杂多变,已有的运维软件不可能穷尽所有的运维需求,总有一些运维需求需要运维人员自己去编写程序解决,运维人员很有必要学会一门编程语言来解决实际问题,让程序代替人力去自动运维,减轻重复工作,提高效率。那选择哪一门语言合适呢?当然是选一门学习成本低、应用效果显著的,这方面Python的性价比最高,原因是:一方面,大部分的开源运维工具都是由纯Python编写的,如Celery、Ansible、Paramiko、Airflow等,学习Python后可以更加顺畅地使用这些开源工具提供的API,可以阅读这些开源工具的源代码,甚至可以修改源代码以满足个性化的运维需求;另一方面,Python与其他语言相比,有着以下优势:
· 简单、易学。阅读Python程序类似读英文,编码上避免了其他语言的烦琐。
· 更接近自然的思维方法,使你能够专注于解决问题而不是语法细节。
· 规范的代码,Python采用强制缩进的方式使得代码具有较好的可读性。
· Python拥有一个强大的标准库和丰富的第三方库,拿来即用,无须重复造轮子。
· 可移植性高,Linux、UNIX、Windows、Android、Mac OS等一次编写,处处运行。
· 实用效果好,学习一个知识点,能够直接实战——用在工作上,立竿见影。
· 潜移默化,学习Python能够顺利理解并学习其他语言。
Python也是最具潜力的编程语言,在2020年IEEE发布的顶级编程语言排行榜中,Python依然是排名第一(已经连续3年排名第一),如图1.1所示。而图1.2所示表明,Python现在已成为美国名校中最流行的编程入门语言。ANSI/ISO C++标准委员会的创始成员Bruce Eckel曾说过:“life is short, You need Python。”一度成为Python的宣传语,这正是说明Python有着简单、开发速度快、节省时间和精力的特点。另外,Python是开放的,也是开源的,有很多善良的开发者在第三方库中贡献了自己的源代码,许多功能都可以直接拿来使用,无须重新开发,这也是Python的强大之处。
图1.1 IEEE Spectrum给出的编程语言排行榜
图1.2 在美国名校编程语言的流行情况
下面摘抄一段Python在维基百科中的介绍。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象,并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。由于Python支持重载运算符,因此Python也支持泛型设计。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python被粗略地归类为“脚本语言”(Script Language),但实际上一些大规模软件开发项目,如Zope、Mnet及BitTorrent及Google也广泛地使用它。Python的支持者喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shell script、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的,并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C、C++、Cython来编写扩充模块。由于Python编译器本身也可以被集成到其他需要脚本语言的程序内,因此很多人还把Python作为一种“胶水语言”(Glue Language)来使用,即使用Python将其他语言编写的程序进行集成和封装。
在Google内部的很多项目中,比如Google Engine使用C++编写性能要求极高的部分,然后使用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过在2004年,Python已在Google内部使用,Google招募了许多Python高手,但在这之前就已决定使用Python。他们的目的是尽量使用Python,在不得已时改用C++;在操控硬件的场合使用C++,在快速开发时使用Python。”
一些技术术语不理解没关系,Python是许多大公司都在使用的语言,如Google、NASA、知乎、豆瓣等,学习Python会有很大的用武之地,完全不用担心它的未来。
Python的设计哲学是优雅、明确、简单。提倡最好使用一种方法做一件事,Python的开发者一般会拒绝花哨的语法,选择明确而很少有歧义的语法。下面再摘一段Python格言:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
上面的格言来自Python官方,也有中文版本,如下:
优美胜于丑陋,明晰胜于隐晦,
简单胜于复杂,复杂胜于繁芜,
扁平胜于嵌套,稀疏胜于密集,
可读性很重要。
虽然实用性比纯粹性更重要,
但特例并不足以把规则破坏掉。
错误状态永远不要忽略,
除非你明确地保持沉默,
直面多义,永不臆断。
最佳的途径只有一条,然而他并非显而易见——谁叫你不是荷兰人?
置之不理或许会比慌忙应对要好,
然而现在动手远比束手无策更好。
难以解读的实现不会是个好主意,
容易解读的或许才是。
名字空间就是个“顶呱呱”的好主意。
让我们想出更多的好主意!
Python如此优秀,让我们一起来学习吧。