Python:我错过了什么吗?

时间:2009-02-19 19:50:27

标签: python

我正在学习Python,同时实现构建脚本等。目前一切都运行良好,因为脚本做了他们需要做的事情。但我一直觉得我错过了一些东西,比如“The Python Way”。我知道构建脚本和胶水脚本并不是最令人兴奋的开发工作,可能很难成为揭示Python真正力量的候选者,但我仍然希望有机会让我的思绪受到重创。我主要用C#开发,我发现我的Python代码在结构和样式上看起来与我的很多C#代码非常相似。换句话说,我觉得我在用C#思考,但用Python写作。

我真的错过了什么吗?

(注意:我意识到这不是一个编程问题而且它是相当广泛的,并且可能没有明确的答案,所以如果必须的话,请将其归结为遗忘。)

16 个答案:

答案 0 :(得分:36)

我建议您阅读Generators, Iteratorsitertools以及最重要的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 hereDive Into Python 3, here.“为什么”这是:hereherehere

答案 3 :(得分:6)

当你开始使用python进行系统编程时,你一定要看一下这个话题:http://www.dabeaz.com/generators/

答案 4 :(得分:5)

最近我通过在python中解决the Project Euler问题来学习/改进我的python。这对我来说非常有效,因为:

  1. 这很有趣,很有竞争力,所以我有动力继续前进
  2. 它迫使我以一种非常自然的方式使用python数据结构来获得我需要的性能,因此教会了我很多关于列表,集合,字符串,迭代等的知识。
  3. 大多数问题只需要一页代码就可以解决,所以你有更多的时间来考虑以更优雅的方式进行抛光或重写
  4. Python非常容易处理大整数,所以它就像是使用正确的语言
  5. 我完全推荐这个。

答案 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)

这样想:

  • 如果你为小工作写的太多,那就错了,这不是pythonic。

您要编写的大多数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”方式做事的人增加了价值。这些是装饰器和元类。

对于装饰器,强烈建议使用this stackoverflow答案,对于Meta Classes,您可以浏览this

答案 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