很长一段时间以来,我一直是Python语言的狂热学习者。拥有超过6年的Java [专业]经验,再加上一点C ++ [业余爱好]经验 - 可以公平地说,我的观点深深植根于这种静态类型,强烈约束的语言带来的习语。简而言之 - 我可以说旧学校的思维方式对我的编程风格有重大影响。
我接受Python而不是说Ruby的理由主要是巧合,因为我得到了一些兼职工作,我可以帮助使用Python。已经有两个星期了,事情就是一场革命!在IDLE和Python Essential Reference武装,这是一个接一个的启示。就像一个经典的物理学家在重力不复存在时会感觉到的那样!
无论如何,据我所知,为了实现w / python的有效性,需要花一些时间进行真正的动手工作。不仅仅是语法,我觉得这是因为我的思维方式。然而,尽我所能准备,有一件特别让我感到烦恼的事 - python提供了太多的成语来执行相同的事情。例如,列表理解和过滤器(...),apply(...)和eval(...)等,而这些习语不是完全可替代的,但我发现他们的主要目的在很大程度上重叠。 我知道,与其用法相比,必须有潜在的性能提升。然而,作为一个初学者,什么是最好的方式来接受教育并遏制'n'方式分散注意力?
答案 0 :(得分:4)
列表理解和过滤器(...), 同时应用(...)和评估(...)等 这些成语并不完全 可以替代,但我发现他们的 主要目的重叠到一个伟大的 程度
pythonic方式是:使用简单的for循环或列表推导。 filter
和map
是旧版本语言的残余。 Guido希望他们一度被删除但事实证明有一些有效的用例和足够多的人希望他们留下来(另见this thread)。请勿使用eval
。
不要担心性能,除非它成为一个问题(在这种情况下最简单的方法 - 尝试使用标准库中高度优化的函数 - 大多数时候是最好的方法)。
我认为一般来说Python在尝试提供一种(显而易见的)方式时非常简单,尽管确实会出现有效(更大或更小)的变体,并且某些主题的观点确实不同。
拾取Python习语可以像浏览本网站一样简单,并特别关注Python问题的高度评价答案(大多数时候对最佳做事方式有一些共识)。
答案 1 :(得分:3)
由于您来自Java背景,我建议您阅读Python is not Java。更不用说侧边栏中的大多数其他文章了。本文为Java程序员如何无意中误用Python(以及如何不使用)提供了一些很好的指示。
答案 2 :(得分:2)
答案 3 :(得分:2)
请务必阅读Idioms and Anti-idioms,这是官方Python文档的一部分。另请务必阅读Python样式的PEP8。
答案 4 :(得分:2)
类型
import this
进入IDLE
答案 5 :(得分:1)
很抱歉,如果我的答案不是你的问题那么长,但是,无论如何,这里是:
首先关于listcomps / filter / apply / eval。如果你要使用过滤器或应用你最好使用列表推导(或生成器表达式)或for
循环, - 过滤器,映射,减少和应用基本上是atavisms直到我知道,可以安全地忽略。 Eval与其中任何一个都没有任何关系,它只是将字符串计算为python代码。你可能不应该使用它,除非你有一个非常好的理由(暗示:你没有)。
习惯用法:好吧,在大多数情况下,对于给定问题,在python中有一种最佳的“做法”,应该用于99%的类似案例。示例:需要解析/转换/生成xml?使用lxml。需要做网络/几乎任何其他类型的i / o?使用twisted。等等。当然还有其他选择,但大多数时候确实有一种最佳的做事方式。如果您只是使用标准库,这甚至更有意义,因为它为常见问题提供了许多最佳解决方案(尽管它确实包含一些相当无用的东西)。
答案 6 :(得分:0)
有趣的是你应该这样说:“这是一个接一个的启示。就像一个经典的物理学家在重力不复存在时会感觉到的那样!”:http://xkcd.com/353/