【转】python吐槽笔记

rynnpj 2013-01-03 08:36:11
从Hans Petter Langtangen 的书“A primer on scientific programming with Python”开始学起。这本书学习是不需要任何语言基础的,只要具备高中以上,甚至初中的数学物理知识就可以学习。当然由于没有中文版的,所以还要懂英语。虽然我的英语很渣,不过有四级英语的水平也够用了。
不过在学习的过程中难免会跟其他语言去对比,有些不习惯的地方忍不住要吐槽一番。
(1)'a' is a list; let b=a
这个功能让我蛋疼不已。一旦定义了一个list 'a',然后
b=a
那么a就和b绑定到了一起:如果a的内容增加或者减少,b都会保持同步。这就好像同一个list有两个不同的名字。我实在想象不到这个功能有什么用。
如果你想把a的内容传递给b,而且二者保持独立,那么你需要:
b=a

(2)len 和del function
为什么是function而不是method呢?设计成list的method不是更方便吗?

(3)pprint 和scitools.pprint2
pprint 的意思是“pretty print”。这我就不明白了:如果想打印的好看就使用format print就可以了,就如同c和shell中都有printf命令,何必要整出一个pprint,大多数情况下还是不满足自己的要求。

(4)tuple vs list
既然有list为什么又要tuple呢?难道就是为了防止程序员不小心修改了list的内容吗?程序员怎么就那么不小心呢?
Hans说为什么学习tuple的第三条理由是因为python的软件中经常会用到tuple,所以你应该知道。天哪,这也是理由吗!

好像开始理解为什么python标榜“一个问题只有一个解决方案”了,原来是内置了这么多的冗余功能。
现在刚刚学到这里,便学便总结吧

原文:http://blog.sina.com.cn/s/blog_89cd04dd0101cm81.html
...全文
464 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ForestDB 2013-01-06
每个人的侧重点不同,也许多看几名语言,感触更深。
  • 打赏
  • 举报
回复
crifan 2013-01-06
基本同意4楼意见。 其实,稍微认真看点,也就可以看出,原作者,本来就是哪天心情不高兴,跑来吐槽了一下。 而根本不是经过严谨思考而写出的文章,呵呵。 你要是认真了,原作者的目的就达到了。 就像芙蓉,凤姐的例子。。。。
  • 打赏
  • 举报
回复
wingzero520 2013-01-06
tuple 跟 list 的区别除了元素不能变以外,tuple 自身还可以作为字典的键存在: a = { (1,2,3): "123" } # 成功 a = { [1,2,3]: "123" } # 失败 至于这有什麼用,那你就在使用中慢慢体会吧。
  • 打赏
  • 举报
回复
ImN1 2013-01-04
既然容许不同的人有不同的吐槽方式,也应该容许不同的语言有不同的写法 语言只是一个零件工厂,做出来的零件怎么用还是要看用的人 字符串连接,有+和join() 用图片给你一百个单词,把他们连接起来,得出结果,手打绝对用+快(不用粘贴join的前提) 但用文本给你一百个单词,同样操作那还是join快 人生也一样,要么拼时间,要么拼质量 如果所有都一样,那回到“人人三十六”的时代好了 如果不知道“人人三十六”,请教一下父母或父母的父母
  • 打赏
  • 举报
回复
angel_su 2013-01-04
看看可以,不过个人觉得都是无病呻吟,实际上方便好用就行。最近换了个贵点的鼠标,非流线造型有棱角,刚开始居然觉得会刺手,貌似被忽悠跑去找客服唠叨了下想换别的,但是用几天习惯了根本不再是个问题...
  • 打赏
  • 举报
回复
wopabe 2013-01-04
感叹楼主的学习精神,向你学习,向你致敬
  • 打赏
  • 举报
回复
ChongQingJin28 2013-01-03
我试着解答一下,如果你愿意,可以再转载过去:

1) 关于两个list重名的问题

好像不仅仅是两个list可以重名,连一个库都可以用import ** as ***重名,函数也可以重名。
至于用途,可以想想C语言的指针,函数重名比C语言的函数指针要清晰的多了吧!
list的重名也可以理解成一个结构指针。
我很难想象C语言里面没有了指针,还会是C语言吗?

Java里面好像没有指针的概念,所有给你一个库,你只能是拿来用,想要改变函数的名字,你只能重新的建立函数,
对原有函数进行封装。而在python里面这样做却是轻而易举。
改变一个java库函数的名字有意义吗?如果你能改变10个名字,或许你就可以创建自己的库了,这样总有意义了吧!


2)关于len与del 为什么不是method

谁说他们不是method呢?len的method是__len__,del的method是__delxxx__。
var.len() 与 len(var) 相比,好像没有那个更方便,但后者至少还有一些函数式编程的影子吧!


3)pprint 和 format

请问printf如何的打印一个数组呢(用for循环啊)。
那再请问我给你一个已经做好了的for循环你要不要呢?(可以试试吧)
那个就是pprint。

4)list与tuple

为什么要用tuple呢?那C语言里为什么要有一个const呢?
tuple是一个const struct。难道IP协议是每个月换一次的吗?
某些东西必须是常量,不可改变。

如果你知道了list,你却不会用tuple的话,我想你也没有必要再学程序了。


5)一个问题只有一个解决方案

怎么可能只有一个解决方案呢?python的UI有Tkinter,wxPython,PyQt,GTK等,python的web架构也有好几种。
但是这些好像都和python语言本身无关。语言本身关心的是如何定义变量,如何控制程序的执行等。
好像ruby的循环方法有好几种。

  • 打赏
  • 举报
回复
发帖
脚本语言

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • ITBOB • 鲍勃
加入社区
帖子事件
创建了帖子
2013-01-03 08:36