Python shell对比
对Python、shell的一些思考
如果使用python去写脚本来处理日常事务的话,相对于shell是一件比较麻烦的事情,因为我可以使用shell在花费更少的时间内,比较熟练地使用awk、sed和grep这些常用的命令在非常简短的脚本语句内,完成python一大段代码所能够完成的功能。
前两天,读到了一篇文章“又拍网架构-又一个用到Python的网站”,网址:http://www.fovweb.com/web/youpai-python.html。上面写到:又拍网的服务器端开发语言主要是PHP和Python,其中php用于编写Web逻辑,而Python则主要用于开发内部服务和后台任务。一般情况下,网站架构的开发语言可以用下图所描述:
百度百科上对于Python的介绍是:一种面向对象、直译式程序设计语言,也是一种功能强大而且完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。这种语言具有非常清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。目前,基于这种语言的相关技术正在飞速发展,用户数量急剧扩大,相关的资源非常多。
综合网络及书籍对于Python的各种评价来看,Python应用是非常的广泛,而且在未来也是非常被看好的语言。但这并不代表Python是适用于任何场合的,如对于一个SA(系统分析员)而言,平时管理系统用shell脚本肯定是最简单的,如果纯粹的系统管理,应该很少有问题是shell解决不了的,使用shell来处理也会显得更加地方便和快捷,举个例子:把所有开头是#的行都找出来,用shell只需要一个grep命令,而对于Python则需要open(文件).readlines(),然后还需要读入正则表达式模块,一行一行地读入文本,再分析该行是否满足条件,需要一大堆的逻辑代码才能完成shell一个命令的功能。
当然,任何一种语言必定有它的适用范围,虽然在开发效率方面Python要低于shell要高于shell,但Python相对于shell的优点,依照我最近的学习,感觉可以概括为如下方面:
(1)Python不需要记忆太多的命令,语法简单,有C基础的人学起来非常容易上手,易于使用。而shell要学的命令太多了,但常用的命令不是太多。
(2)Python可移植性好,它的标准是统一的,不会出现因为平台的不同运行结果不同,但shell的命令在各个平台上还有些不一样。
(3)Python要更加强大,shell是一种命令语言,同时也可以看成是一个命令解释器,用于接收诸如awk、sed的命令调用等完成相关的功能。而Python则是一种编程语言,Python提供给程序员更大的自由度和灵活性,以完成shell所不能完成或者难于完成的编码任务,如实现面向对象的模块化设计、操作服务器数据库等等。
(4)Python支持面向对象、支持可扩展性和可嵌入性,同时提供了功能丰富的库
(5)性能方面:很明显地,Python的执行效率要高于shell,有一个很充分的理由就是shell本身的各种进程间IPC通信要造成相当大的开销。而Python底层是用C实现的,其性能可以接近于C,但具体相同功能的Python代码量却要比C短上很多倍!因此,按照性能排序:C > Python > shell,按照开发效率排序:shell > Python > C。
其实对于各种编程语言的发展,如果纯以语言的执行效率而言,最快的肯定是汇编了,为什么有了汇编之后还会有C?而有了C之后还会有Perl、Python呢?这应该是许许多多天才般的程序语言设计者们,从开始都现在一直在不断地追求的,试图在语言的执行性能与易用性上寻找一个平衡点。而语言本身只是工具而已,而这项工具好不好用,除了很大程度上取决于语言本身的设计之外,另一方面则是与语言使用者本身的熟练度、能力和水平密切相关。
程序设计语言其诞生的意义在于解决问题,验证想法,属于对问题求解的实践过程,如研究数据挖掘的,主要关注的是数据的分布、概率模型等数学算法问题,用哪种语言来验证方案的可行性并不非常重要,对于语言本身的唯一的要求可能就是要好用,最好不需要有太多复杂的语法,通过简单地学习就可以上手并能轻松地写出程序,二是要执行效率可以接受,不需要最快,但也不能太慢。
而在执行效率与易用性上,脚本语言给了用户一个很好的平衡点,而这一点,恰恰是脚本语言的最重要的意义。我们可以通过脚本方便快捷地编写代码,甚至在某些情况下,这此脚本代码执行的效率跟C是相差无几的。
春节过年,走亲访友是常事,就没有用实验去验证比较一下shell、Python和C性能的差异。不过我找到一个非常有意思的网站:http://shootout.alioth.debian.org/
这个站点对比了所有主流语言的执行的性能包括[时间、内存、代码量],如下图所示的是:在运行多个有代表性的测试用例情况下,Python的性能除以C语言的性能得到的数据图,可以看出C在[时间、内存]上的开销要低于Python,但在[代码量]上Python要少于C。
- 哇~语言组织的好好,后面学python 跨平台可用嘛~
- 4楼 luoyanghero 2014-03-24 22:16发表 [回复]
- 之前还在徘徊学shell还是python,现在决定学python了,thanks
- 2楼 liuchunyan007 2013-10-10 13:50发表 [回复]
- shell太多的指令,常用的没有几个,
Python shell对比的更多相关文章
- python编辑器对比和推荐
python编辑器对比和推荐 我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出.有些我没有用过,先不写了.以下是我使用过的python IDE: 除了PythonWin, Visua ...
- 如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE
http://www.crifan.com/how_to_do_python_development_under_windows_environment/ 本文目的 希望对于,如何在Windows下, ...
- ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数
一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...
- PowerShell与Unix Shell对比:八大实例
PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...
- 【转载】路径双反斜杠!!!Python IDLE或Python shell中切换路径 切换目录os.chdir("C:\\python37\\2019pythonshel37\\diedai")
Python IDLE或shell中切换路径在Python自带的编辑器IDLE中或者python shell中不能使用cd命令,那么跳到目标路径呢.方法是使用os包下的相关函数实现路径切换功能. im ...
- python shell与反弹shell
python shell与反弹shell 正常shell需要先在攻击端开机情况下开启程序,然后攻击端运行程序,才能连接 反弹shell,攻击端是服务端,被攻击端是客户端正常shell,攻击端是客户端, ...
- 解决 Python shell 中 Delete/Backspace 键乱码问题
简述 进入 Python shell,按下 Delete/Backspace 键,会出现 ^H 字符.命令输入错误后只能从头开始,无法删除,让人很头疼.为了便于后期使用,分享一个一劳永逸的方式. 基本 ...
- 基于Python Shell获取hostname和fqdn释疑
一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...
- python性能对比
python性能对比之items #1 #-*- coding:utf8-*- import datetime road_nodes = {} for i in range(5000000): roa ...
随机推荐
- grep命令经常使用參数及使用方法
1.grep介绍 grep命令是Linux系统中一种强大的文本搜索工具,它能使用正則表達式搜索文本.并把匹 配的行打印出来.grep全称Global Regular Expression Print, ...
- 用Main方法调用freemarker生成文件
MyGenerator.java package com.comp.common; import java.io.BufferedWriter; import java.io.File; import ...
- Oracle体系结构三(学习笔记)
- Linux常用shell脚本
在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,如何学好脚本,最关键的是就是大量的练习 和实践. 1.用Sh ...
- linux的fork()函数-进程控制
进程作为构成系统的基本细胞,不仅是系统中独立活动的实体,而且是独立竞争资源的基本实体.它要经历创建.执行.等待.终止等一系列过程. 一.fork入门知识(转载) 一个进程,包括代码.数据和分配给进程的 ...
- 1z0-052 q209_4
4: You have two tables with referential integrity enforced between them. You need to insert data to ...
- Android遍历获取指定目录的文件(转)
// 获取当前目录下所有的mp4文件 public static Vector<String> GetVideoFileName(String fileAbsolutePath) { Ve ...
- opencv实现gamma灰阶检測
简单介绍 本篇解说使用opencv来測试,表示camera gamma參数的灰阶卡图片指标:YA Block.DynamicRange.Gray Scale. 详细实现 实现代码 #include & ...
- ASP.NET MVC:通过FileResult向浏览器发送文件
在 Controller 中我们可以使用 FileResult 向客户端发送文件. FileResult FileResult 是一个抽象类,继承自 ActionResult.在 System.Web ...
- oracl查询锁表语句
技能源于生活的不断实践,实践是对知识的不断扩展和总结.汇总.进而形成思想体系! --查询锁表语句 select sess.sid, sess.serial#, lo.oracle_username, ...