为什么推荐python? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
laskuma
V2EX    Python

为什么推荐python?

  •  
  •   laskuma 2012-11-22 15:17:24 +08:00 8143 次点击
    这是一个创建于 4711 天前的主题,其中的信息可能已经有所发展或是发生改变。
    无意冒犯各位大大…也不想引起争吵。不把ruby拿来做比较,真心的问一句,为什么都推荐学python? 本人只会java和c,对python了解甚少,希望能多学到点关于python的知识。
    第 1 条附言    2012-11-23 17:36:33 +08:00
    大家这么吵下去我也很难办。。。能具体讲一下python的文件操作吗?
    先给每个人都来个感谢,请查收
    43 条回复    1970-01-01 08:00:00 +08:00
    ch_linghu
        1
    ch_linghu  
       2012-11-22 15:35:45 +08:00   1
    普通的推荐理由:简单,好用,轮子多。
    最重要的推荐理由:我自己比较熟。
    fastzhong
        2
    fastzhong  
       2012-11-22 16:07:51 +08:00   1
    python & ruby 都不错,就像少林和武当,没有最高,只有更高,学习这玩意我觉得和练武一样,就像每一门武功,不是每个人都适合练,但不等于说这门功夫就不行,或者人有问题。初尝则止,python和ruby没有什么太大的区别,学好则要有缘分。
    zealot
        3
    zealot  
       2012-11-22 20:17:26 +08:00   1
    我推荐学门脚本语言,不一定是Python,ruby、perl都可以。
    程序员会门脚本语言的好处就不解释了
    lightening
        4
    lightening  
       2012-11-22 20:35:58 +08:00   1
    花两个小时看一下最简单的《简明Python教程》,就能略知一二了。
    blacktulip
        5
    blacktulip  
       2012-11-22 21:08:40 +08:00   2
    楼主还是学js吧,js已经一桶浆糊了
    alsotang
        6
    alsotang  
       2012-11-22 21:35:58 +08:00   4
    Python 没有 Ruby 和 JS 好用,Ruby 没有 JS 好用。但越好用的越灵活越不容易掌握。JS 的话,从CoffeeScript学起,然后等待 ECMAScript 6 吧。

    就速度来说,JS > Ruby > Python;不过就资料的可理解性以及入门的简易度来说,Python > Ruby > JS,Python 的官方文档十分优秀。就包管理来说,npm > gem > pip(or easy_install)。

    如果说要推荐一门脚本语言的话,我也会推荐学 Python,推荐 2.7 或 2.6 版本。无理由噢亲..

    个人喜欢用 Ruby,因为标准库功能强大。不过我在尽量向 V8 based 的语言靠。
    leohxj
        7
    leohxj  
       2012-11-22 21:37:22 +08:00   1
    推荐js,未来会是html和js的世界。
    ltzliwe
        8
    ltzliwe  
       2012-11-22 22:05:17 +08:00   1
    @alsotang 速度 Ruby > Python ?怎么来的。。 把JS拿来和Ruby、Python比有点不靠谱吧 。。
    0racleTink
        9
    0racleTink  
       2012-11-22 22:15:17 +08:00   2
    reus
        10
    reus  
       2012-11-22 22:18:37 +08:00   1
    又不是只能使用一门语言,全都学了就是了。马上学,不要再问这类问题了
    dreamer
        11
    dreamer  
       2012-11-23 00:06:22 +08:00   1
    我觉得喜欢什么编程语言可以稍微反映出一点个人性格,如果你喜欢 _why 和 DHH 那样的家伙,肯定也会喜欢用 Ruby.

    个人推荐 Ruby. 如果做 Web 开发的话就更推荐了,不仅因为有 Rails ,更因为 Rails 社区的人一般会把「做得好看」当作份内的事情,这点还是挺重要的。
    Ricepig
        12
    Ricepig  
       2012-11-23 00:13:47 +08:00   1
    其实很重要的一个因素是livid用python开发的本站吧
    PrideChung
        13
    PrideChung  
       2012-11-23 00:29:38 +08:00   1
    求你们了,讨论脚本语言的时候能不能带上PHP这个倒霉孩纸……
    air00dd
        14
    air00dd  
       2012-11-23 08:40:46 +08:00   1
    @leohxj 心动了!~
    laskuma
        15
    laskuma  
    OP
       2012-11-23 09:25:44 +08:00
    @ch_linghu 轮子是指?
    @zealot @fastzhong 觉得各种语言除了语法,是否有底层操作之外就没有差别了…

    @blacktulip @alsotang @leohxj JS不是刚被某大神喷掉吗
    leohxj
        16
    leohxj  
       2012-11-23 10:08:30 +08:00   1
    @laskuma 某大神是某人?
    Hysteria
        17
    Hysteria  
       2012-11-23 11:05:07 +08:00   1
    @laskuma 轮子应该就是库、框架等等神马的了。
    judezhan
        18
    judezhan  
       2012-11-23 11:25:09 +08:00   1
    程序员学一门新语言竟然需要理由?
    alsotang
        19
    alsotang  
       2012-11-23 11:34:13 +08:00   1
    @ltzliwe Ruby 1.9 已经是 JIT 虚拟机的了阿。
    holmesabc
        20
    holmesabc  
       2012-11-23 11:40:14 +08:00   1
    @alsotang 感觉python的doc文字条理很有问题,跟java doc没的比, 虽然默认的java doc很丑。

    两点很不爽的
    一,不能简单明确的反应类的继承关系。
    二,不能简单明确的知道函数返回值的类型。

    了解一个类,还是直接用help看,比看官方doc来的直接的多。
    meta
        21
    meta  
       2012-11-23 12:35:03 +08:00   1
    主要python还是简单吧,像perl我都用了十几年了,还是有好多东西不明白,看别人的源代码都像是天书。
    heroicYang
        22
    heroicYang  
       2012-11-23 12:39:35 +08:00   1
    @blacktulip 哈哈,5楼这个比喻,一桶浆糊。。。不过我感觉现在全身心做js的感觉真不错!为前后端大统一努力!
    laskuma
        23
    laskuma  
    OP
       2012-11-23 12:53:17 +08:00
    @leohxj Bret Victor
    binux
        24
    binux  
       2012-11-23 13:15:14 +08:00   1
    @holmesabc 那是因为

    一,python的类和继承一般并不重要。一般并不关心一个类的怎么继承的,只关心它的接口是怎么样的。“如果它看起来像鸭子,叫起来像鸭子,走路像鸭子,那么它就是鸭子”
    二,python是弱类型的,一般使用不关心类型,只要返回值看起来像“鸭子”就可以了。一个函数返回,要么抛异常,要么能bool,要么是内置类型,要么能遍历,然后就够了。如果不是,文档一定会写的。
    fwee
        25
    fwee  
       2012-11-23 13:24:09 +08:00   1
    @alsotang 不是..
    holmesabc
        26
    holmesabc  
       2012-11-23 13:54:28 +08:00   1
    @binux 当我写这些的时候,就想到有人要这么回答

    一、什么叫不关心继承。
    我连一个接口有什么方法有什么方法都还不知道,你就说他是这个接口的实现。有个蛋用。
    鸭子,前提你要知道鸭子是看起来像什么,怎么叫的,怎么走路的。
    你都没有这个前提,我捣蛋指个鸡,说鸭子是这个样子,是这么叫的,是这么走路的。
    你就是说这是鸭子了。

    二、我管你是不是弱类型。
    这个问题不是说是不是弱类型,而是有没有类型的问题。
    不是说鸭子就有鸡的方法,你不告诉我你返的鸭子还是鸡,不然怎么知道他是应该像鸭子还是鸡。
    binux
        27
    binux  
       2012-11-23 14:13:12 +08:00   1
    @holmesabc

    一、
    它有什么接口和它是从什么继承的多大关系,或者说身份就那么重要?文档里面一定写了这个类都有哪些API,但是你非得知道哪些是从父类继承的吗?何况大部分python类都是从object继承的,只是长得像鸭子罢了。

    二、
    类型有那么重要吗?告诉你返回值是一个长得像dict的东西,那它就肯定可以[key],但是非得继承自dict吗?告诉你返回值是可以遍历的东西,那它就非得像list能[index]吗?包括参数也是,接受list的函数大部分都可以接受可遍历对象,具体类型没有那么重要。至于返回的是鸡还是鸭,大部分时候,只要它长了两条腿,能下单那就够了,至于会不会游泳,要用到的时候再说。
    reus
        28
    reus  
       2012-11-23 14:19:50 +08:00   1
    @holmesabc 用dir()就可以看到全部方法了。而且如果你像写java一样写个几层的继承结构,那是你自寻烦恼。复用代码请多用组合少用继承
    查看返回值的类型,用print type(exp)就可以,也不需要查文档
    holmesabc
        29
    holmesabc  
       2012-11-23 15:04:02 +08:00   1
    @binux 好吧,我承认我说的接口是带点java的意思,但我这里的意思是按python里面来的,不是说实现一个接口,就继承一个类,最终的效果,只要有这个方法就行了,我不管你继不继承类。

    别老拿list说。哪有那么多东西反回的都是list。返回一个对像,你都不知道他有什么方法,难道只靠猜。返回了一个动物,我觉得他是鸭,因为他可以游泳,我就认为他真是鸭,可以跑了,结果最后发现M的只是个鱼,一跑就挂掉了。


    @reus 我不是在说java和python语言的问题,只是在说文档的问题。别跑偏,免得搞的别人以为我像是在批评python这个语言。还有我刚上面就说了的,看文档,还不如help,当然dir也算。


    我说文档烂,也不是乱说的,当然英文烂也有一方像。
    昨天看xml.dom这个,随便小看一下,里面的结构了解了一下。什么xml.dom里的Document对像什么Node对像。之后又看了xml.dom.minidom,因为就在xml.dom的下一个嘛,肯定要看。
    结果里面有例子,好吧,跟着写一下呗。
    里面有这个方法 xml.dom.minidom.parse(),下面的解释是Return a Document from the given。。。
    Ok,你返回一个Document是吧,xml.dom里面也有Document,潜意识的就认为这是同一个。
    之后我要输出xml,然后在xml.dom里面看各个对象的方法,一时没看见输出的方法。
    好像google,有的例子是dom.writexml(...),
    我去啊,还有这方法,又去xml.dom里面找,fuck,还是没有。。。。
    让人蛋疼啦,最后还是help看了一下,里面有明确的结构,这才发现Document居然是xml.dom.mimidom里面的Document。然后再去看文档,果然有。
    你说你要是xml.dom.minidom.parse()里面说明是返回的xml.dom.minidom.里面的Document,哪还有这么多屁事,要不你给个链接也行。

    要是在java doc里面,返回的东西,肯定有链接指向这个类,我点过去,我就知道自己的理解是不是错了。



    最后再说一下,我是在说文档,不是在说语言。
    如果您想继续喷,别跑偏了。
    reus
        30
    reus  
       2012-11-23 15:35:03 +08:00   1
    @holmesabc 我没有在说语言问题。如果你在使用xml.dom.minidom.parse()后用dir看一下,那你根本不需要google就会知道怎么输出xml,因为很容易就能看到toxml和writexml这些方法

    你认为要知道一个对象支持什么方法,需要先知道它的类型,然后根据这个类型去查文档。所以你关心继承树和变量的类型。但其实你不需要,因为直接就可以知道一个对象的方法,所以说类型就不重要了

    遇到不熟悉的类请这样:
    xml.dom.minidom.parseString('<p />').__class__
    dir(xml.dom.minidom.parseString('<p />').__class__)
    binux
        31
    binux  
       2012-11-23 15:45:32 +08:00   1
    @holmesabc python有的库确实很烂,一点也不pythonic
    holmesabc
        32
    holmesabc  
       2012-11-23 15:46:00 +08:00   1
    @reus 好吧,你都说了
    遇到不熟悉的类请这样:
    xml.dom.minidom.parseString('<p />').__class__
    dir(xml.dom.minidom.parseString('<p />').__class__)

    这不是说dir和help好用么, 还不是间接说明我想表达的问题,python的文档太烂。

    我不是说什么学习方法,因为毕竟没有系统去学过python,只是用它偶尔写写脚本,你也知道用java写日常用的是有多蛋疼。
    你们的学习方法,先学习了。

    我现在只想表示一个观点就是python的doc太烂,更java doc没的比。
    chloerei
        33
    chloerei  
       2012-11-23 15:47:47 +08:00   2
    楼主再也不敢发语言贴了~
    reus
        34
    reus  
       2012-11-23 16:04:54 +08:00   1
    @holmesabc 你认为python的文档烂,只是因为它不符合你的使用习惯,改变下使用习惯就不会这样认为的了。何况,python是动态语言,返回值的类型是不确定的,毕竟不能像java一样直接从源码里就能解析出来,所以这类信息没有也不奇怪
    yetone
        35
    yetone  
       2012-11-23 16:07:43 +08:00   1
    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我可以说 Javascript 丑的一逼吗?我可以说 Ruby 美得不像话吗?想要速度就别用脚本语言了。好吧,我还是乖乖地去学 LISP 吧(幸亏我不是程序员,为了求生不得不学那些丑爆了的语言)
    holmesabc
        36
    holmesabc  
       2012-11-23 16:14:50 +08:00   1
    @reus 你认为python的文档烂,只是因为它不符合你的使用习惯,改变下使用习惯就不会这样认为的了。 不知道可不可以这么理解,如果没看过比它好的文档,就接受了烂文档。

    一个您都不愿意去看的文档,难道是好文档。

    唉, 返回值类型和动态语言有毛系。
    难道您见过一个方法有时返回int有时候返回str有时候Document。
    laskuma
        38
    laskuma  
    OP
       2012-11-23 17:39:18 +08:00
    @livid 不知道是不是有bug 每次感谢完一个回复者后必须刷新才能感谢下一个 不然即使显示了感谢已发送还是无效的。。
    或者说这是为了防止散钱。。? 还是我这里网络问题。?
    blacktulip
        39
    blacktulip  
       2012-11-23 18:08:36 +08:00
    不是跟楼主开玩笑啦,真的去学JS吧,反正都动态语言,先学JS有以下好处:

    1. 前面说过 JS 一桶浆糊了,学会了前后端通杀;
    2. JS 的语法最别扭,所以呢楼主要是先啃会了 JS ,以后无论学 Python 还是 Ruby 都小菜一碟,而且学的时候还会经常出现「哇居然能这样写好爽啊」之类的感觉,学习顺序要是反过来的话不免会觉得「靠怎么要这样写太别扭了」;
    3. 会了 JS 才能去学 CoffeeScript .
    reus
        40
    reus  
       2012-11-23 18:33:00 +08:00
    @holmesabc 我可没有表达过不愿意看文档这个意思。我知道什么样的信息,应该用什么工具得到。比如类型信息,python是在运行时才能得到的,所以我会用运行时的工具。文档也有文档所擅长提供的信息。比如example和其他细节

    python确实没有限定返回值只能是同一个类型,比如这个:
    http://gist.github.com/4134931
    foo的返回值的类型就是不确定的,只能在运行时得到
    python允许这样,所以一个方法会返回不同类型的值也是常见的
    当然对python代码进行静态类型分析也是可以的,但没有必要这样做,如果需要静态类型安全,可以用其他语言或者python的变种(cython, rpython之类
    binux
        41
    binux  
       2012-11-23 18:50:02 +08:00
    @timonwong 动态类型?或者随便怎么叫了
    reus
        42
    reus  
       2012-11-23 19:55:44 +08:00
    @binux 类型系统的动态/静态,和强类型/弱类型,是两个概念。参考:http://www.artima.com/weblogs/viewpost.jsp?thread=7590
    alsotang
        43
    alsotang  
       2012-11-23 22:24:03 +08:00
    @fwee 不好意思,是我搞错了..
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2364 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:54 PVG 23:54 LAX 08:54 JFK 11:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86