FreeTstar

loving Freedom + + loving Linux

  • 首页
  • Archive
  • 关于
  • 杂七杂八
  • 留言板
Twitter Sina RSS

Python很酷,尤其对C/C++程序员来说是这样,然而Perl却不是

发布于 2011年05月8日 由 freetstar
24 条评论发表评论

python是一个很cool的脚本编程语言,perl很有用但是用起来很痛苦。对于几乎所有的任务,python有充足的理由是第一选择,尤其是对那些不熟悉perl或者python的C/C++程序猿们。对那些了解perl的C/C++程序员来说,python也堪称一个更好的选择

WHY?!

看了以下例子你就明白:

例子1:读取整个文件
perl

my $text = do { local( @ARGV, $/ ) = $file ; <> } ;
我看了半天是没看懂啥意思,ARGV在这里是干嘛的,来看看我找的其他例子
local( *FH ) ;
open( FH, $file ) or die "Problem\n"
my $text = do { local( $/ ) ; } ;
另外一个
my $holdTerminator = $/;
undef $/;
my $buf = ;
$/ = $holdTerminator;
我该说什么了,perl你不尴尬嘛

python

]fileContents = file("filename").read()

例子2:定义一个func函数,返回int值,第四个参数默认值为0

C++

[

int func(int parm1, int parm2, int parm3, int parm4 = 0);

perl

sub func
{
my $parm1 = shift;
my $parm2 = shift;
my $parm3 = shift;
die "Usage: func(parm1, parm2, parm3, parm4 = 0)"
unless defined($parm3);
my $parm4 = shift || 0;
...
}
看着是不是怪怪的,即使你会用perl。用如此笨拙的代码来实现这么简单的东西。die用来处理参数,
perl不担心你是否没有传入参数或者传了10个以上的参数。perl中函数中的变量默认是全局的,需要用my设置为局部变量。
要知道大部分c/c++ 程序猿可不习惯这个

python

def func(parm1, parm2, parm3, parm4 = 0):
...
python会自己处理参数个数,并且设置参数默认值,而且函数里默认的值是局部变量哦

例子3:打印当前的进程名,并跟随一个换行符

C++

cout < < argv[0] << ‘\n’;

perl

print "$0\n";
看着挺顺眼的是不,$0是进程的名字。或许你会尝试用$ARGV[0]代替$[0],要知道C++里我是能用ARGV[0]表示进程名的,但是结果却不是你要的
perl中ARGV仅仅包含要处理的参数,而不包括进程名(译者说,实际上shell一般默认$0也是进程名的

python

print sys.argv[0]
#好吧,让你比较困惑的是还要加一个sys

例子4:文件迭代,代开一个in.txt文件,对每行进行迭代操作

C++

ifstream infile("in.txt");
const int MAX_LINE_LEN = 256;
char line[MAX_LINE_LEN];
while(infile.getline(line, MAX_LINE_LEN))
{
... do something with line
}
//要创建一个buffer来存放每一行

perl

open(INFILE, "in.txt") || die 'Couldn't open "in.txt"';
while()
{
... do something with $_
}
open看起来挺好的。。加了个die代码之后变得丑了

Python

infile = open("in.txt")
for line in infile:
... do something with line
好简洁吧

例子5:检查字符串的开头是否以'H'开始,假设这个字符串是从文件迭代中获得的

C++

if(line[0] == 'H')
{
...

perl

if(substr($_, 0, 1) eq 'H')
{
...
perl中没有字符串操作符,你要调用substr函数,而且等于是eq而不是==

python

if line[0] == 'H':
...
c++程序猿更习惯这个吧
或者

if line.startswith('H'):

例子6:将一个列表传入函数中,使其能够在函数中修改它,而不是得到列表的拷贝
C++

void addItem(vector<string>& theList)
{
  theList.push_back("xyz");
}

vector<string> aList;
aList.push_back("abc");
addItem(aList);
这是通过C++中的引用传值进行的

Perl

sub addItem
{
  my $listRef = shift;

  push(@$listRef, 'xyz');
}

my @aList = ('abc');
addItem(\@aList);
这里用到了很多Perl特有的特点,用\表示alist是通过引用传值的等等。其实比较复杂

Python

def addItem(theList):
  theList.append('xyz')

aList = ['abc']
addItem(aList)
python中一切是通过引用传递的

还有以下例子:
Array and string length
Print a list that belongs to a hash
Trim whitespace from a string
Classes
Inheritance
Magic
Exceptions
Assert
Code Maintenance

来看看各路大神怎么推崇Python的吧
"Perl? Ha, ha, ha. Try Python" O'Reilly ad.
Bruce Eckel talks about Python当你发现Python的高效时,你会觉得我为什么要把生命中的其他时间浪费在其他语言上
Why Hate Perl 为神马讨厌Perl
Why I Promote Python
来看看Eric Raymond的意见Eric Raymond's "Why Python?"

原文在此:here

分类:PROGRAM
用PyGTK实现的一个抽奖小程序
学习Python的利器-IPython Part I

24 则回应给 “Python很酷,尤其对C/C++程序员来说是这样,然而Perl却不是”

  1. TimJJJ CHINA Internet Explorer Windows 说道:
    2012年04月12日 2:37 下午

    来看看

    [回复]

  2. yetone Mozilla Firefox Linux 说道:
    2012年03月6日 10:46 上午

    perl易写不易读啊

    [回复]

  3. madog CHINA Mozilla Firefox Windows 说道:
    2011年06月27日 5:02 下午

    perl是很艺术的语言,非常灵活。
    倡导的是不只一种方法能达到目的。
    这才叫酷!
    而不像py一样,同一个东西,10个人写出来,几乎9份都一样。

    [回复]

    freetstar CHINA Mozilla Firefox Linux 回复:
    六月 30th, 2011 at 10:07 下午

    这就是语言各自的特点吧。希望此文章别成为口水文,,

    [回复]

  4. wecing CHINA Google Chrome Linux 说道:
    2011年06月17日 2:19 下午

    看完这篇文章之后,我觉得可以忽略ESR当年说的“最好五种都会”的言论了……

    [回复]

    freetstar CHINA Google Chrome Windows 回复:
    六月 17th, 2011 at 4:22 下午

    玩转python,be pythonic…

    [回复]

  5. vvoody SWEDEN Opera Windows 说道:
    2011年05月10日 4:03 上午

    perl读取文件,这样其实也挺简洁了:
    open(my $in, “<", "filename");
    @lines = ;

    open(INFILE, “in.txt”) || die ‘Couldn’t open “in.txt”‘;
    … …
    open看起来挺好的。。加了个die代码之后变得丑了 <– 这句不太同意,perl可以在一行内搞定检错,其他还得try吧

    [回复]

    vvoody SWEDEN Opera Windows 回复:
    五月 10th, 2011 at 4:08 上午

    @vvoody, 汗,@line=后面怎么被吃掉了,@line = <$in>

    [回复]

    freetstar CHINA Google Chrome Linux 回复:
    五月 10th, 2011 at 11:05 上午

    我觉得可能是原作者不熟悉perl

    [回复]

  6. OSMSG AUSTRALIA Mozilla Firefox Linux 说道:
    2011年05月8日 2:51 下午

    注释 注意代码注释。。。看见注释不对就浑身难受….

    [回复]

    freetstar CHINA Mozilla Firefox Windows 回复:
    五月 8th, 2011 at 3:13 下午

    @OSMSG, 恩,写的懒得改了 :arrow:

    [回复]

  7. Mucid CHINA Mozilla Firefox Windows 说道:
    2011年05月8日 10:16 上午

    python是效率,C/C++是细节 :twisted:

    [回复]

    freetstar CHINA Mozilla Firefox Windows 回复:
    五月 8th, 2011 at 3:15 下午

    @Mucid, python开发效率高,底层效率不知道怎么样

    [回复]

  8. Mucid CHINA Mozilla Firefox Windows 说道:
    2011年05月8日 10:15 上午

    依然用文件指针的飘过…… :twisted:

    [回复]

  9. 婉秋 AUSTRALIA Mozilla Firefox Windows 说道:
    2011年05月8日 9:51 上午

    淡定如果,没几个看得懂

    [回复]

    freetstar CHINA Mozilla Firefox Windows 回复:
    五月 8th, 2011 at 3:14 下午

    @婉秋, 淡定

    [回复]

  10. Tao Zhu CHINA Mozilla Firefox Linux 说道:
    2011年05月8日 8:50 上午

    这样子不好吧?你不是在公然挑起各语言派别之间的口水战么?

    By the way:以第一个例子“读取整个文件”来说,真正优美的Perl程序并不是这么写的。

    [回复]

    freetstar CHINA Mozilla Firefox Windows 回复:
    五月 8th, 2011 at 3:14 下午

    @Tao Zhu, 翻译过来的,就是想看看大家有啥看法,Perl我一点没接触过,哈哈

    [回复]

    Tao Zhu CHINA Mozilla Firefox Linux 回复:
    五月 8th, 2011 at 3:30 下午

    @freetstar, 好吧,估计是python的水军

    [回复]

    freetstar CHINA Mozilla Firefox Windows 回复:
    五月 8th, 2011 at 3:34 下午

    @Tao Zhu, ╮(╯▽╰)╭,windows没linux折腾起来好玩,这几天毕业设计该死的论文必须要用word :(

    [回复]

    Tao Zhu CHINA Mozilla Firefox Linux 回复:
    五月 8th, 2011 at 3:37 下午

    @freetstar, 那就果断vbox虚拟XP+word呗!也算是为vbox做点贡献

    [回复]

    freetstar CHINA Mozilla Firefox Windows 回复:
    五月 8th, 2011 at 3:40 下午

    @Tao Zhu, 没找到合适的xp镜像= =

    [回复]

    Tao Zhu CHINA Mozilla Firefox Linux 回复:
    五月 8th, 2011 at 3:43 下午

    @freetstar, 我有一个很标准的600M的XP镜像,可是不知道怎么给你呢?不知道有什么好一点的网络途径

    [回复]

    freetstar CHINA Google Chrome Linux 回复:
    五月 8th, 2011 at 4:25 下午

    @Tao Zhu, 多谢,不折腾了,直接用win顶几天万事了.可能是我的vb版本太低,装完xp都黑屏了

    [回复]

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用 * 标注

*

*


疑问 开心 悲伤 邪恶 惊叹 微笑 脸红 笑 惊讶 惊奇 迷惑 酷 憨笑 生气 阴险 转眼球 眨眼 主意 箭头 中立 哭 大笑

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-spam image

点击取消回复
第 1 页,共 1 页1
  • 欢迎订阅

  • Github

  • 近期评论

    • freetstar CHINA Mozilla Firefox Linux 发表在《留言板》
    • _Fly CHINA Google Chrome Linux 发表在《使用e4rat加速你的linux启动速度(ext4文件系统专用)》
    • walfred Mozilla Firefox Windows 发表在《留言板》
    • freetstar CHINA Mozilla Firefox Windows 发表在《用landslide创建html5 slide》
  • Spread Firefox Affiliate Button
  • 我的豆瓣

  • 链接表

    • 51开源社区
    • Adam's
    • delectate's blog
    • Don's
    • fl
    • ghostunix
    • Jasey Wang
    • Jerry's Blog
    • Moolight@Ericyue
    • OSMSG
    • panda
    • Pity is the Bomp
    • PT ubuntu
    • Tao Zhu
    • ubuntuhome
    • WOW!ubuntu
    • zhangzhfang
    • 丕字的blog
    • 傻东の学习笔记
    • 奶牛的blog
    • 孤风颠影
    • 弯柚博客
    • 熊猫党军委主席
    • 靖 轩
    • 马力哥
    • 黑孩儿
  • 我的支付宝

  • 功能

    • 登录
    • 文章 RSS
    • 评论 RSS
    • WordPress.org
© FreeTstar. WordPress 强力驱动 | Nest Theme by YChong