Pythonshell的一些思考

如果使用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
3楼 nerissa 2014-02-08 23:24发表 [回复]
看你干嘛吧。若是纯粹写个什么服务器脚本的,300行以内的。个人觉得SHELL就够了。但若要写一个大逻辑什么的1000行,看情况。
2楼 liuchunyan007 2013-10-10 13:50发表 [回复]
shell太多的指令,常用的没有几个,
1楼 地球类人猿党主席 2011-12-20 22:22发表 [回复] [引用] [举报]
仅会使用C,正考虑是学习下shell还是python呢,

Python shell对比的更多相关文章

  1. python编辑器对比和推荐

    python编辑器对比和推荐   我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出.有些我没有用过,先不写了.以下是我使用过的python IDE: 除了PythonWin, Visua ...

  2. 如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE

    http://www.crifan.com/how_to_do_python_development_under_windows_environment/ 本文目的 希望对于,如何在Windows下, ...

  3. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

  4. PowerShell与Unix Shell对比:八大实例

    PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...

  5. 【转载】路径双反斜杠!!!Python IDLE或Python shell中切换路径 切换目录os.chdir("C:\\python37\\2019pythonshel37\\diedai")

    Python IDLE或shell中切换路径在Python自带的编辑器IDLE中或者python shell中不能使用cd命令,那么跳到目标路径呢.方法是使用os包下的相关函数实现路径切换功能. im ...

  6. python shell与反弹shell

    python shell与反弹shell 正常shell需要先在攻击端开机情况下开启程序,然后攻击端运行程序,才能连接 反弹shell,攻击端是服务端,被攻击端是客户端正常shell,攻击端是客户端, ...

  7. 解决 Python shell 中 Delete/Backspace 键乱码问题

    简述 进入 Python shell,按下 Delete/Backspace 键,会出现 ^H 字符.命令输入错误后只能从头开始,无法删除,让人很头疼.为了便于后期使用,分享一个一劳永逸的方式. 基本 ...

  8. 基于Python Shell获取hostname和fqdn释疑

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  9. python性能对比

    python性能对比之items #1 #-*- coding:utf8-*- import datetime road_nodes = {} for i in range(5000000): roa ...

随机推荐

  1. Thread-Local Storage for C99

    线程本地存储(TLS)是一种机制,通过这样的机制进行变量分配.在每一个现存线程都有一个实例变量.这样的执行模型GCC用来实现这个,起源于IA-64处理器,可是已经被迁移到其它的处理器.它须要大量的支持 ...

  2. wepy - 与原生有什么不同(事件更改)

    对于repeat,详情见官方文档 <style lang="less"> .userinfo { display: flex; flex-direction: colu ...

  3. 算法笔记_197:历届试题 带分数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. ...

  4. netsh学习

    show allowedprogram –显示被允许的程序配置 show config - 显示防火墙的配置 show currentprofile -显示 Windows 防火墙的当前配置文件. s ...

  5. uva 699 The Falling Leaves(建二叉树同一时候求和)

    本来看着挺难的.大概是由于我多瞟了一眼题解,瞬间认为简单多了.做题就得这样,多自己想想.如今是 多校联赛,然而我并不会做. .. .慢慢来,一直在努力. 分析: 题上说了做多不会超过80行.所以能够开 ...

  6. TP3.2批量上传文件(图片),解决同名冲突问题

    1.html <form action="{:U('Upload/index')}" enctype="multipart/form-data" meth ...

  7. poj-----Ultra-QuickSort(离散化+树状数组)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 38258   Accepted: 13784 ...

  8. HDUOJ --2523

     http://acm.hdu.edu.cn/showproblem.php?pid=2523 哈希表..球阀 代码: #include<iostream> #include<vec ...

  9. IE浏览器中,设置指定程序查看源文件

    第一步:     先按Ctrl+R,输入regedit进入注册表     依次找到 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explo ...

  10. Google Map 符号

      符号 简介 如果您想在标记上使用基于矢量的图标,或者向多段线添加图像,便可使用符号. 标记支持使用光栅图像以及矢量图像.请参阅有关定制标记图标的文档. Symbol 是一种可显示在 Marker  ...