为什么推荐python?

2012-11-22 15:17:24 +08:00
 laskuma
无意冒犯各位大大…也不想引起争吵。不把ruby拿来做比较,真心的问一句,为什么都推荐学python? 本人只会java和c,对python了解甚少,希望能多学到点关于python的知识。
8172 次点击
所在节点    Python
43 条回复
meta
2012-11-23 12:35:03 +08:00
主要python还是简单吧,像perl我都用了十几年了,还是有好多东西不明白,看别人的源代码都像是天书。
heroicYang
2012-11-23 12:39:35 +08:00
@blacktulip 哈哈,5楼这个比喻,一桶浆糊。。。不过我感觉现在全身心做js的感觉真不错!为前后端大统一努力!
laskuma
2012-11-23 12:53:17 +08:00
@leohxj Bret Victor
binux
2012-11-23 13:15:14 +08:00
@holmesabc 那是因为

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

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

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

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

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

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


@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
2012-11-23 15:35:03 +08:00
@holmesabc 我没有在说语言问题。如果你在使用xml.dom.minidom.parse()后用dir看一下,那你根本不需要google就会知道怎么输出xml,因为很容易就能看到toxml和writexml这些方法

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

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

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

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

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

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

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

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

python确实没有限定返回值只能是同一个类型,比如这个:
http://gist.github.com/4134931
foo的返回值的类型就是不确定的,只能在运行时得到
python允许这样,所以一个方法会返回不同类型的值也是常见的
当然对python代码进行静态类型分析也是可以的,但没有必要这样做,如果需要静态类型安全,可以用其他语言或者python的变种(cython, rpython之类

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/53041

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX