我正在学习Python,同时实现构建脚本等。目前一切都运行良好,因为脚本做了他们需要做的事情。但我一直觉得我错过了一些东西,比如“The Python Way”。我知道构建脚本和胶水脚本并不是最令人兴奋的开发工作,可能很难成为揭示Python真正力量的候选者,但我仍然希望有机会让我的思绪受到重创。我主要用C#开发,我发现我的Python代码在结构和样式上看起来与我的很多C#代码非常相似。换句话说,我觉得我在用C#思考,但用Python写作。
我真的错过了什么吗?
(注意:我意识到这不是一个编程问题而且它是相当广泛的,并且可能没有明确的答案,所以如果必须的话,请将其归结为遗忘。)
答案 0 :(得分:36)
我建议您阅读Generators, Iterators,itertools
以及最重要的List Comprehensions。
这些是Pythonic的支柱。而对于其他一切,有PEP-8。
阅读这些概念并尝试在适当的地方使用它们。一切顺利!
PS:别忘了import this
;)
附录:我也会在这个帖子中汇总其他人给出的一些很好的建议:
答案 1 :(得分:16)
不 - 对于从其他类C语言迁移到Python的人来说,这是很常见的。我相信您正在寻找的是让您的代码更加"Pythonic"的方法。好消息是你编写的Python越多,你的代码就会变得越Pythonic。这是“我怎样才能更简单地”这种态度的自然溢出。
另一个值得关注的好地方是The Zen of Python。这些对Python开发的态度也会对你有所帮助。
答案 2 :(得分:7)
到目前为止,你已经得到了很好的建议。我只会添加Dive Into Python。
编辑:截至2011年10月4日,this work can be found here。 Dive Into Python 3, here.“为什么”这是:here,here和here。
答案 3 :(得分:6)
当你开始使用python进行系统编程时,你一定要看一下这个话题:http://www.dabeaz.com/generators/
答案 4 :(得分:5)
最近我通过在python中解决the Project Euler问题来学习/改进我的python。这对我来说非常有效,因为:
我完全推荐这个。
答案 5 :(得分:5)
你在读Python还没写过吗?
这是Python 2.6.1发行版中删除.pyc和.pyo文件的脚本。
#!/usr/local/bin/python
"""Recursively zap all .pyc and .pyo files"""
import os
import sys
# set doit true to actually delete files
# set doit false to just print what would be deleted
doit = 1
def main():
if not sys.argv[1:]:
if os.name == 'mac':
import EasyDialogs
dir = EasyDialogs.AskFolder(message='Directory to zap pyc files in')
if not dir:
sys.exit(0)
zappyc(dir)
else:
print 'Usage: zappyc dir ...'
sys.exit(1)
for dir in sys.argv[1:]:
zappyc(dir)
def zappyc(dir):
os.path.walk(dir, walker, None)
def walker(dummy, top, names):
for name in names:
if name[-4:] in ('.pyc', '.pyo'):
path = os.path.join(top, name)
print 'Zapping', path
if doit:
os.unlink(path)
if __name__ == '__main__':
main()
你能找到多少Python成语?
答案 6 :(得分:4)
这样想:
您要编写的大多数Python代码都非常简单直接。通常你不需要做任何简单的工作。如果你写的太多,停下来思考是否有更好的方法。 (这就是我在Python中学到很多东西的方法!)
答案 7 :(得分:3)
添加Andrew Hare和Baishampayan Ghose的答案......
要学习任何语言的习语必须涉及阅读用该成语编写的代码。我还在学习Python的习语,但我已经用其他语言学习了这个。我可以阅读关于列表理解的内容,但是当你看到这些东西在使用中时,灯泡才会真正出现并说:“哇!太棒了!两行代码就清晰了!”所以,找一些有趣的pythonic代码,开始阅读并理解它。如果您在工作计划的背景下看到所有内容,那么知识将更好地保留在您的脑海中。
答案 8 :(得分:2)
另一个强大的资源:Code Like a Pythonista: Idiomatic Python。
答案 9 :(得分:2)
编写一些Python代码并将其发布在SO上以供审阅和反馈是否为pythonic。
答案 10 :(得分:2)
研究设计良好的pythonic API /框架。一些最好的生活在标准库之外。注意他们允许你不做的内容。我的最爱:
py.test比unittest更具pythonic(基于JUnit)。只需编写test_foo()
函数而不是继承自unittest.TestCase
的类。只需assert x == y
而不是self.assertEqual(x, y)
。还有更多好东西......
Doctest也比单元测试更pythonic。由于一些实际的烦恼,许多人放弃了它,但这个想法很棒。
如果您正在深入测试,mock模块的操作 - >断言方法比竞争库记录更具Pythonic - >重播范例。
requests是我见过的最干净的API之一,比httplib + urllib + urllib2更好。
JSON和YAML更具pythonic than XML。
JSON-RPC比XMLRPC或 shudder SOAP更具pythonic。
ElementTree比DOM更加pythonic API。通过优化具有.text
或子代的标签,它减少了XML< - >数据结构阻抗不匹配(但仍然可以通过.tail
hack往返混合内容。)
Scapy是一个用于发送和解析网络数据包的令人惊讶的简洁框架。
我相信Storm是最具pythonic的对象关系映射。免责声明:我几乎没有ORM经验。
heapq是一个精美的模块。请阅读代码。
itertools非常强大。阅读文档中的所有示例 关于广泛使用它是pythonic还是一种奇怪的方言,意见各不相同: - )
阅读“Python中的新功能”,至少在您使用的最新版本中。阅读一些PEP。了解为什么更改是一种改进。
最后,确保您充分利用了交互式Python。学习API的最佳方法是尝试它们,看看会发生什么!多行编辑,完成和简单的帮助()访问是必备功能 - 查看ipython(包括笔记本!),dreampie,bpython。
答案 11 :(得分:1)
虽然构建脚本和线索脚本[ sic ]并不是最令人兴奋的开发工作,但它们完全是揭示Python真正力量的候选者。
首先,看看已经用Python编写的各种类似make的工具。
这个池塘里的大鱼是Scons:http://www.scons.org/。了解这一点。
此博客文章讨论了替代方案http://farmdev.com/thoughts/46/the-python-make-tool/
“我仍然希望有机会让我的思绪受到打击”从Google开始:找到已经完成部分或全部工作的Python工具。代码更少,下载和阅读更多。
答案 12 :(得分:1)
除了其他人提到的Generators,Iterators,List Comprehensions等内容之外,我想提出一些更多的概念,我觉得这些概念确实为试图以“pythonic”方式做事的人增加了价值。这些是装饰器和元类。
答案 13 :(得分:0)
我建议找一个私人的蟒蛇大师。向他们展示你的一些代码,并让他们审查/重写为惯用的python。这样你会受到启发吗?
答案 14 :(得分:0)
要回显TLHOLADAY,请阅读标准库。这就是“pythonic”的东西。如果您没有那么好的感觉,那么请阅读sqlachemy或django的来源或您选择的项目。
答案 15 :(得分:0)
import this
如果你可以将你的代码放在禅宗的旁边,并且感觉良好,那么你已经走了一半。另外检查this.py模块:有点讽刺。
另一半正在学习以下内容:正则表达式,列表推导,生成器,元类,参数解压缩,装饰器,列出步进,'带'陈述,条件分配,强大的内置函数,如枚举(), map(), zip(), reduce(),任意()和 pow()等等(请查看Hidden features of Python了解更多信息)
在此过程中,您可以阅读其他人的代码并进行修改。
Finnaly:了解 finally
和import antigravity