2009-02-19 101 views
15

我正在學習Python的過程中,同時實現構建腳本等。目前一切正常,因爲腳本做他們需要做的事情。但我一直有這種感覺,我錯過了一些東西,比如「Python方式」。我知道構建腳本和粘合腳本並不是真正最令人興奮的開發工作,並且可能很難成爲揭示Python真正威力的人選,但我仍然希望有機會讓自己的思想暴露無遺。我主要用C#開發,我發現我的Python代碼在結構和風格上看起來與我的很多C#代碼非常相似。換句話說,我覺得我在用C#思考,但用Python編寫。Python:我錯過了什麼嗎?

我真的錯過了什麼嗎?

(注:我明白,這與其說是一個編程問題,它是相當廣泛,而且可能沒有一個明確的答案,所以國防部我下來被人遺忘,如果你不得不這樣做。)

+0

每你的注意,這可能是更適合一個社區維基討論... – 2009-02-19 19:55:43

回答

35

我會建議你閱讀Generators, Iterators,itertools以上,最重要的是List Comprehensions

這些是任何Pythonic的支柱。對於其他一切,有PEP-8

閱讀這些概念,並嘗試在適當的地方使用它們。祝一切順利!

PS:不要忘了import this

附錄:我也聚集在此線程這裏別人給的一些很好的建議:

+0

生成器和列表解析的組合看起來很棒。我想我會使用更多的那些。謝謝。 :) – 2009-02-20 01:04:27

+1

itertools是一個非常優雅的事情模塊。它經常被人遺忘。 – 2009-02-20 04:24:52

+3

不要忘記,在生成器,迭代器,itertools,列表解析甚至PEPS之前,python已經是一種非常有用的語言! – 2009-02-20 10:55:06

16

否 - 這是對於那些從其他類似C語言轉向Python的人來說很普遍。我相信你正在尋找的方法是讓你的代碼更多"Pythonic"。好消息是你編寫的Python越多,你的代碼將變得越多Pythonic。這是「我怎樣才能更簡單」的態度的自然溢出。另一個好地方是The Zen of Python。這些對Python開發的態度也會對你有所幫助。

+0

感謝「Python化」鏈接。現在讓我更好地瞭解要拍攝什麼。 – 2009-02-20 01:16:08

+0

「Pythonic」鏈接被破壞! – alexpinho98 2013-05-31 17:57:22

3

爲了增加安德魯野兔和Baishampayan戈塞的答案...

要了解任何語言的習語都必須涉及閱讀該成語中所寫的代碼。我仍然在學習Python的成語,但我已經通過其他語言瞭解了這一點。我可以閱讀關於列表解析的內容,但是燈泡只有在你看到這樣的東西在使用時才真正出現,並且說:「哇!太棒了!兩行代碼,它很清晰!所以去找一些你覺得有趣的pythonic代碼,並開始閱讀並理解它。如果你在工作計劃中看到所有的東西,這些知識會更好地保持你的頭腦。

5

最近我一直在學習/改進我的python,通過解決python中的the Project Euler問題。這工作對我很好,因爲:

  1. 這是有趣和有競爭力的,所以我的動機一直走下去
  2. 也迫使我使用Python的數據結構中一個非常自然的方式來獲得性能我需要,所以教會了我很多關於列表,集合,字符串,迭代等的知識。
  3. 大多數問題都需要少於一頁代碼來解決,所以您有更多時間去思考拋光或重寫更多優雅的方式
  4. Python很容易處理大整數,所以它只是覺得使用正確的語言

我完全推薦這個。

+0

我也學到了很多在Python中使用Project Euler的問題。特別是使用builtins和itertools模塊的Python的函數式編程方面。 – 2010-05-20 00:55:07

1

雖然構建腳本和線索腳本[sic]並不是最令人興奮的開發工作,但它們完全是揭示Python真正威力的候選者。

首先,看看已經用Python編寫的各種類似make的工具。

這個池塘裏的大魚是Scons:http://www.scons.org/。瞭解這一點。發現Python的工具,已經在做一些或所有你想要什麼:

關於替代http://farmdev.com/thoughts/46/the-python-make-tool/

「我還是想有機會在我的腦海裏吹」開始與谷歌本博客文章會談做。代碼少,下載和閱讀更多。

+0

[織物](http:// fabfile)是另一種啓發式工具(專注於遠程執行而非構建),並採用了非常的Pythonic設計。 – 2013-01-16 08:15:46

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成語?

0

我建議找個人蟒蛇大師。向他們展示一些你的代碼,並讓他們審查/重寫成慣用的python。所以你會受到啓發。

0

要回顯TLHOLADAY,請閱讀標準庫。這就是「pythonic」的東西。如果您在那裏感覺不太好,那麼請閱讀sqlachemy或django的源代碼或您選擇的項目。

2

編寫一些Python代碼並將其發佈到SO上以供審查和反饋,無論它是pythonic。

4

這樣想:

  • 如果你正在寫太多了一點工作,什麼是錯的,這是不是Python的。

你要編寫的大部分Python代碼都非常簡單直接。通常你不需要很多簡單的工作。如果你寫得太多,停下來想一想如果有更好的辦法。 (這是我在Python中學到很多東西的方法!)

1

除了其他人在這裏提到的發電機,迭代器,列表理解等東西外,我還想提出一些更多的概念,我覺得它們肯定會增加價值有人企圖以'pythonic'的方式做事。這些是裝飾者和元類。

對於裝飾者,this stackoverflow答案強烈建議和Meta班,你可以通過this

2

研究精心設計的pythonic APIs /框架。標準圖書館以外的一些最棒的生活場所。請注意他們允許你不是。我的收藏:

  • py.test比單元測試更Python(這是基於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或顫動 SOAP更Python。

    • ElementTree是比python更多的pythonic API。通過對具有.text或兒童的標籤進行優化,它可以減少XML數據結構阻抗不匹配(但仍可通過.tail黑客對來自混合內容的數據進行往返)。

  • Scapy是用於發送和解剖網絡數據包一個驚人的簡潔框架。

  • 我相信Storm是最Python的對象關係映射在那裏。免責聲明:我幾乎沒有使用ORM的經驗。

  • heapq是一個漂亮的模塊。只需閱讀代碼。

  • itertools功能非常強大。閱讀文檔中的所有示例。
    衆說紛紜是否使用它廣泛是Python的或怪異的方言:-)

閱讀「什麼Python的新生」,至少在過去的版本中,你正在使用。閱讀一些PEP。瞭解爲什麼的變化是一個改進。

最後,請確保您充分利用交互式Python。學習API的最好方法就是嘗試一下,看看會發生什麼!多行編輯,完成和簡單的幫助()訪問是必備功能 - 查看ipython(包括筆記本!),dreampie,bpython。

0

import this

如果你可以把你的代碼旁邊的Python的禪和感覺很好,你是走了一半。還有檢查this.py模塊:有點諷刺。

另一半是學習一樣東西:正則表達式列表內涵發電機元類說法拆包裝飾名單步進「與「聲明有條件分配,強大的內置插件一樣枚舉()地圖()拉鍊()減少()任何()POW(),和許多其他(檢查Hidden features of Python更多)

沿途你可以閱讀其他的方式人們的代碼並修改它。

Finnaly:瞭解finallyimport antigravity