2008-08-30 198 views
27

現在我主要用C/C++開發,但是我用Python編寫了一些小工具來自動化一些任務,我真的很喜歡它作爲語言(尤其是生產力)。Python是否適合大型軟件項目(不是基於Web)?

除了性能(由於Python與C模塊的接口簡單,有時候可以解決這個問題),您認爲在開發獨立的複雜應用程序時適用於生產環境(例如到文字處理器或圖形工具)?

,你有什麼建議IDE?在我看來,即使對於小型項目,Python提供的IDLE也不夠。

+0

這個問題太混亂和多方分享。似乎你想知道特別是使用CPython,而不是IronPython等,但是這從來沒有得到澄清。你只是在問語言還是選擇語言+口譯員?關於IDE的問題是另一個話題。如果我問這個問題,我會這麼說:「CPython對於開發複雜應用程序有多好?」 – 2013-11-29 19:18:34

+1

在2014年瀏覽時,我注意到了這個問題,並且想要注意到Resolver One,作爲幾個評論中的示例提到的電子表格不再被積極開發。 – syrion 2014-07-18 12:07:01

回答

31

我們已經使用IronPython在Resolver Systems上構建了我們的旗艦電子表格應用程序(40kloc生產代碼 - 它是Python,意思是每個功能的loc爲loc),所以我肯定會說它已準備好用於複雜應用程序的生產使用。

有兩種方式,這可能不是一個有用的答案給你:-)

  1. 我們使用IronPython的,而不是更常見的CPython的。這給了我們能夠使用.NET類庫的巨大優勢。我可能會在這裏設置自己的火焰,但我會說我從未真正看過一個看起來「專業」的CPython應用程序 - 所以訪問WinForms小部件集對我們來說是一個巨大的勝利。如果我們需要性能提升,IronPython還爲我們提供了輕鬆進入C#的優勢。 (儘管說實話我們有從來沒有需要做到這一點,迄今爲止我們所有的性能問題都是因爲我們選擇了愚蠢的算法,而不是因爲語言速度慢。)使用C#從IP比編寫C擴展爲CPython。
  2. 我們是一個極限編程商店,所以我們在編寫代碼之前編寫測試。如果不先編寫測試,我不會用動態語言編寫產品代碼;缺乏編譯步驟需要被某些東西所覆蓋,正如其他人所指出的,沒有它的重構可能會很艱難。 (Greg Hewgill的回答暗示他有同樣的問題,但另一方面,我認爲我現在不會編寫 - 或尤其是重構 - 任何語言的產品代碼 - 但是YMMV。)

回覆:IDE - 對於每個使用他們最喜歡的文本編輯器的人來說,我們都非常好;如果你更喜歡更重量級的東西,那麼WingIDE是相當受人重視的。

17

在我看來蟒蛇是開發複雜的應用程序多準備。在編寫圖形客戶端時,我發現服務器端的pythons實力更強。但看看http://www.resolversystems.com/。他們使用.net ironpython端口在Python中開發整個電子表格。

如果你對eclipse很熟悉,可以看看pydev,它爲python提供自動補全和調試支持,並提供像svn support這樣的其他eclipse特性。開發它的人剛剛被aptana購買,所以這將是未來的堅實選擇。

@Marcin

缺點:作爲一個動態語言,有辦法 糟糕的IDE支持(正確的語法 完成需要靜態類型,是否 在Java中明確或推斷的SML ),

你是對的,靜態分析可能不會提供動態語言的完整語法完成,但我的事情pydev很好地完成了工作。更進一步,我在編程python時有不同的開發風格。我總是打開一個ipython會話,並且使用一個F5,我不僅可以從ipython獲得完美的完成,還可以進行對象內省和操作。

但是如果你想寫第二谷歌 或雅虎,你將與 C#或Java好得多。

Google just rewrote jaiku在App Engine上工作,全部在python中。據我所知,他們也在谷歌裏面使用了很多python。

12

我真的很喜歡蟒蛇,它通常是我的小(非GUI)選擇這天語的東西,我對我自己做的。

然而,對於一些較大的Python項目我已經解決了,我發現,這是不太一樣的說,C++編程。我正在研究語言解析器,並需要用Python來表示AST。這當然在Python能做的範圍內,但是我在重構時遇到了一些麻煩。我改變了AST的表示形式,改變了很多方法和類,我發現我錯過了C++解決方案中可用的強類型。 Python的鴨打字幾乎靈活,我發現自己增添了不少assert代碼,試圖檢查我的類型,程序運行起來。然後,我不能確定一切都是正確的輸入,除非我有100%的代碼覆蓋率測試(當時我沒有)。

其實,這是我有時錯過的東西。在Python中編寫語法正確的代碼是不可能的。在實際執行代碼之前,編譯器無法告訴您這些信息,因此在不常用的代碼路徑(如錯誤處理程序)中,您可能很容易看到潛藏的未知錯誤。即使是使用%格式字符串打印錯誤消息一樣簡單的代碼,由於類型不匹配,在運行時可能會失敗。

我還沒有使用Python的任何GUI的東西,所以我不能評論這方面。

+10

一般來說,如果你在Python中檢查類型,那麼你做錯了。 Python中的規範風格並不是要詢問對象是什麼類型,而是詢問它支持的方法。例如,不要問「你是狗嗎?」,而是問「你能吠嗎?」 – 2008-11-05 02:35:21

+7

@RyanGinstrom據我所知,他使用類型檢查的斷言,而不是邏輯。這就像添加一些靜態打字的氣味以增加錯誤免疫力。 – Yury 2013-04-17 18:32:24

8

Python被認爲是Python程序員中的一員,它是快速原型開發的偉大語言。沒有太多額外的語法妨礙了你的思維過程,所以你做的大部分工作都傾向於代碼。 (編寫好的Python代碼所需的成語要比編寫良好的C++要少得多)

鑑於此,大多數Python(CPython)程序員都將「過早優化是一切罪惡的根源」歸因於哲學。通過編寫高級(並顯着較慢)的Python代碼,可以在應用程序接近完成時使用C/C++綁定優化瓶頸。此時,通過適當的分析,您的處理器密集型算法將變得更加清晰。通過這種方式,您可以以非常易讀和可維護的方式編寫大部分代碼,同時允許加速。出於這個原因,您會看到用C編寫的幾個Python庫模塊。

無論如何,Python中的大多數圖形庫(即wxPython)都只是圍繞C++庫的Python包裝,所以你幾乎寫了一個C++後端。

爲了解決您的IDE問題,SPE(Stani的Python編輯器)是一個很好的IDE,我已經使用它並且EclipsePyDev也可以完成這項工作。兩者都是OSS,所以他們可以自由嘗試!

[編輯] @Marcin:你有沒有經驗在Python中編寫> 30k LOC?同樣有趣的是,您應該提及Google的可擴展性問題,因爲它們是Python最大的支持者!另外一個名爲NASA的小型組織也經常使用Python;)請參閱"One coder and 17,000 Lines of Code Later"

+3

這對一個編碼器來說是好的......那些有很多瞬態編碼器和超過17K代碼的項目呢?有人知道它是否容易維護嗎? – rogerdpack 2011-07-01 19:08:13

19

你會發現主要是兩個答案,–宗教(答案!當然!這是有史以來最好的語言!)和另一個宗教之一(你必須在開玩笑我!Python?沒有......它不是足夠成熟)。我可能會跳過最後的宗教(Python?!使用Ruby!)。事實如往常一樣,並不明顯。

優點:它很容易,可讀,電池包括,有很多很好的庫,幾乎所有的東西。它的表現力和動態類型使得它在許多情況下更加簡潔。

缺點:作爲一個動態語言,有這樣糟糕的IDE支持(正確的語法完成需要靜態類型,不論是明確的在Java或在SML推斷),它的對象系統是遠遠不夠完善(界面,任何人嗎? ),並且很容易得到具有返回int或布爾值或對象或者在未知情況下進行排序的方法的混亂代碼。

我需要–我喜歡用於腳本,自動化,小型webapps和其他簡單定義好的任務的Python。在我看來,這是迄今爲止最好的這個星球上的動態語言。這就是說,我會從來沒有使用它任何動態類型的語言來開發一個相當大的應用程序。

說–它可以用於堆棧溢出,它有三個開發人員,我猜不超過30k行代碼。對於更大的事情–首先你的開發速度會非常快,然後一旦團隊和代碼庫增長速度放緩的速度比Java或C#更慢。你需要通過編寫單元測試代碼多,以抵消缺乏編譯時間檢查,重構會更加困難,因爲你永遠不知道你的refacoring爆發,直到你運行所有測試,甚至整個大應用等

現在–決定有多大的團隊將會是這樣,一旦完成,該應用應該有多大。如果你有5個或更少的人,並且目標大小大致是堆棧溢出,請繼續,用Python編寫。您將很快完成並且對良好的代碼庫感到滿意。但是如果你想編寫第二個谷歌或雅虎,你會更好地使用C#或Java。你提到的C/C++的注意事項:如果你不是寫性能關鍵軟件(比如大型並行光線跟蹤器,可以運行三個月渲染一部電影),也可以是一個非常關鍵的系統(比如火星着陸器,連續飛行三年,只有一次機會着陸或者損失4億美元)不使用它。對於網絡應用程序,大多數桌面應用程序,大多數應用程序通常不是一個好的選擇。您將在複雜的業務邏輯中死掉調試指針和內存分配。

+2

編譯時間檢查不是替代測試..我不太瞭解Python的抱怨,它「需要大量的單元測試」,因爲所有的代碼都應該..只是因爲編譯的東西,並不意味着它會工作! – dbr 2008-11-04 23:42:34

+0

我會在遊戲中聽到接口的東西實際上影響了你寫的任何pyton代碼。 – 2009-03-03 20:33:47

+0

缺少接口?它的動態語言。另外,應該有足夠的聰明才能儘可能避免OOP。 – dakt 2016-05-24 18:28:14

0

我知道我可能會說明這一點,但不要忘記開發團隊的素質以及他們對技術的熟悉程度會對您的交付能力產生重大影響。

如果你有一支強大的團隊,那麼如果他們很熟悉,這可能不是問題。但是如果有9到5人以上的人對技術不熟悉,他們需要更多的支持,如果生產力的提升無論付出多少費用,都需要打個電話。

2

在較大的代碼庫上重構是不可避免的,缺乏靜態類型使得python比靜態類型語言更加困難。

4

判斷使用何種python的一種方法是查看目前使用python的產品。這個wikipedia page有一個很長的列表,包括各種Web框架,內容管理系統,版本控制系統,桌面應用程序和IDE。

正如它所說的here - 「使用Python的一些最大的項目是Zope應用服務器,YouTube和最初的BitTorrent客戶端,使用Python的大型組織包括Google,Yahoo!,CERN和NASA。使用Python的一些組件。「

因此,簡而言之,是的,它是「在獨立複雜應用程序的開發中適用於生產用途」。許多其他語言也有不同的優點和缺點。哪種語言對你的特定用例來說是最好的語言太主觀了,所以我不會去嘗試,但通常答案就是「你的開發者最瞭解的那個人」。

5

沒有添加到其他的答案,除了,如果你選擇Python中,你必須使用pylint沒人提到至今。

0

我只有一個python體驗,我的垃圾郵件項目。

我知道,可能一些或所有問題取決於我對python的經驗不足。

我發現令人沮喪的這些事情:

  1. 難找到免費
  2. 有限支持良好的IDE自動重構

另外的:

  • 需要引入兩級分組包和模塊混淆我。
  • 在我看來,有沒有一種被廣泛採用的代碼命名慣例
  • 在我看來,有一些標準庫的API文檔不完整
  • 的事實,一些標準庫不完全面向對象的苦惱我
  • 儘管一些Python編碼器告訴我他們沒有這些問題,或者他們說這些都不是問題。

    1

    據我所知,他們也在谷歌裏面使用了很多python。

    那麼我希望如此,如果我沒有弄錯,Python的製造商仍然在谷歌工作?至於使用Python,我認爲它對於獨立應用程序來說是一種很好的語言。它在很多Linux程序中被大量使用,並且有一些很好的組件可以幫助開發GUI。

    1

    Python是一種喜歡使用。我經常使用它,並在C#中編寫大量代碼。在Python中編寫UI代碼有兩個缺點。一個是沒有一個單一的UI框架被大多數社區所接受。當你用C#編寫時,.NET運行庫和類庫都是一起工作的。對於Python,每個UI庫都有自己的語義,這往往與您嘗試編寫程序的pythonic思維模式不一致。我不是在責怪圖書館的作家。我嘗試了幾個庫(wxwidgets,PythonWin [Wrapper around MFC],Tkinter),當我這樣做時,我經常覺得我用Python以外的語言編寫代碼(儘管它是python),因爲庫不是' t完全pythonic它們是另一種語言的端口,它是c,C++,tk。

    因此,對於我來說,我會在.NET中編寫UI代碼(對於我來說,C#),因爲這些庫的一致性是IDE &。但是,當我可以的時候,我會用python編寫業務邏輯,因爲它更清晰,更有趣。

    0

    嘗試Django或Pylons,用它們寫一個簡單的應用程序,然後決定哪一個最適合你。還有其他的(如Turbogears或Werkzeug),但這些是最常用的。

    相關問題