28

現在、私は主に C/C++ で開発していますが、いくつかのタスクを自動化するために Python でいくつかの小さなユーティリティを作成しました。言語として (特に生産性に関して) とても気に入っています。

パフォーマンス (Python と C モジュールのインターフェースの容易さのおかげで解決できる場合もある問題) を除いて、スタンドアロンの複雑なアプリケーションの開発における実動使用に適していると思いますか (たとえば、ワープロに考えてみてください)。またはグラフィックツール)?

どのIDEをお勧めしますか? 私の意見では、Python で提供される IDLE は、小規模なプロジェクトでも十分ではありません。

4

13 に答える 13

34

私たちはIronPythonを使用してResolverSystemsでフラッグシップスプレッドシートアプリケーション(40klocプロダクションコード-そしてそれはPythonであり、IMOは機能あたりのlocが低いことを意味します)を構築したので、複雑なアプリのプロダクション使用の準備ができていると断言できます。

これがあなたにとって有用な答えではないかもしれない2つの方法があります:-)

  1. 通常のCPythonではなく、IronPythonを使用しています。これにより、.NETクラスライブラリを使用できるという大きな利点が得られます。私はここで炎上する準備をしているかもしれませんが、「プロフェッショナル」に見えるCPythonアプリケーションを実際に見たことがないので、WinFormsウィジェットセットにアクセスできることは私たちにとって大きな勝利でした。IronPythonには、パフォーマンスの向上が必要な場合にC#に簡単にドロップできるという利点もあります。(正直なところ、これを行う必要はありませんでした。これまでのパフォーマンスの問題はすべて、言語が遅いためではなく、ダムアルゴリズムを選択したためです。)IPからC#を使用する方が、CPython用のC拡張機能を作成するよりもはるかに簡単です。 。
  2. 私たちはエクストリームプログラミングショップなので、コードを書く前にテストを書きます。最初にテストを作成せずに、動的言語で本番コードを作成することはありません。コンパイルステップの欠如は何かでカバーする必要があり、他の人が指摘しているように、それなしでリファクタリングするのは難しいかもしれません。(Greg Hewgillの回答は、彼が同じ問題を抱えていることを示唆しています。一方、最近は、最初にテストを記述せずに、どの言語でもプロダクションコードを記述したり、特にリファクタリングしたりすることはないと思いますが、YMMVです。)

Re:IDE-私たちは、お気に入りのテキストエディタを使用する各人にかなり問題はありませんでした。あなたがもう少し重いものを好むなら、WingIDEはかなり評判が良いです。

于 2008-11-03T19:05:14.623 に答える
23

それに対する主な答えは 2 つあります。宗教的なもの (はい! もちろん! これまでで最高の言語です!) ともう 1 つの宗教的なもの (冗談でしょう! Python? いいえ... 十分に成熟していません)。最後の宗教はスキップするかもしれません (Python?! Ruby を使ってください!)。いつものように、真実は明らかではありません。

長所:簡単で、読みやすく、バッテリーが含まれており、ほとんどすべての優れたライブラリがたくさんあります。表現力豊かで動的な型付けにより、多くの場合、より簡潔になります。

短所: 動的言語として、IDE のサポートがはるかに劣っており (適切な構文補完には、Java で明示的であろうと SML で推論されたものであろうと、静的な型付けが必要です)、そのオブジェクト システムは完璧とはほど遠いものであり (インターフェイス、誰か?)、簡単に終了してしまいます。 int、boolean、object、または未知の状況下で何らかの種類を返すメソッドを持つ乱雑なコードを使用します。

私の見解 – スクリプト作成、自動化、小さな Web アプリケーション、およびその他の単純で明確に定義されたタスクについては、Python が大好きです。私の意見では、これは地球上で群を抜いて最高の動的言語です。とはいえ、かなりのサイズのアプリケーションを開発するために動的型付け言語を使用すること決してありません。

たとえば、3 人の開発者がいるスタック オーバーフローに使用しても問題ないでしょう。コードは 30,000 行以下だと思います。より大きなものについては、最初は開発が非常に高速になりますが、チームとコードベースが成長すると、Java や C# の場合よりも遅くなります。より多くの単体テストを作成してコンパイル時間チェックの不足を相殺する必要があります。リファクタリングが難しくなるため、すべてのテストまたは大きなアプリ全体を実行するまで、リファクタリングで何が壊れたのかわかりません。

ここで、チームの規模と、完成後のアプリの規模を決定します。人数が 5 人以下で、ターゲット サイズがほぼ Sta​​ck Overflow である場合は、Python で記述してください。すぐに終了し、優れたコードベースに満足できます。しかし、2 番目の Google または Yahoo を作成する場合は、C# または Java を使用する方がはるかに優れています。

あなたが言及した C/C++ に関する補足: パフォーマンス クリティカルなソフトウェア (映画をレンダリングするために 3 か月間実行される大規模な並列レイトレーサーなど) または非常にミッション クリティカルなシステム (3 年連続で飛行する火星着陸船など) を作成していない場合右に着地するチャンスは 1 回しかないか、4 億ドルを失います) 使用しないでください。Web アプリ、ほとんどのデスクトップ アプリ、一般的なほとんどのアプリの場合、これは適切な選択ではありません。複雑なビジネス ロジックでポインターとメモリ割り当てをデバッグすると、死ぬでしょう。

于 2008-08-30T08:21:24.907 に答える
18

私の意見では、python は複雑なアプリケーションを開発する準備が整っています。グラフィカルクライアントを作成するよりも、サーバー側でPythonの強みが見られます。しかし、http://www.resolversystems.com/を見てください。彼らは、.net の ironpython ポートを使用して、Python でスプレッドシート全体を開発しています。

Eclipse に精通している場合は、python のオートコンプリートとデバッグのサポートを提供するpydevを見てください。また、svn サポートなどの他のすべての Eclipse 機能も備えています。開発者はaptanaに買収されたばかりなので、将来的には堅実な選択になるでしょう。

@マルシン

短所: 動的言語として、IDE のサポートがはるかに劣っています (適切な構文補完には、Java で明示的であるか SML で推論されているかにかかわらず、静的な型付けが必要です)。

おっしゃる通り、静的解析では動的言語の完全な構文補完が提供されない可能性がありますが、pydev は非常にうまく機能します。さらに、Python をプログラミングするときの開発スタイルも異なります。私は常に ipython セッションを開いており、1 つの F5 で ipython から完全に完了するだけでなく、オブジェクトのイントロスペクションと操作も取得します。

しかし、2 番目の Google または Yahoo を作成する場合は、C# または Java を使用する方がはるかに優れています。

Google は jaikuを書き直して、すべて Python で App Engine 上で動作するようにしました。そして、私が知る限り、Google 内でも多くの Python を使用しています。

于 2008-08-30T07:19:40.187 に答える
13

私は本当に python が好きです。最近では、自分で行う小さな (GUI 以外の) ものには、たいてい Python を選んでいます。

ただし、私が取り組んだ大規模な Python プロジェクトのいくつかでは、C++ でのプログラミングとはまったく同じではないことがわかりました。私は言語パーサーに取り組んでいて、Python で AST を表現する必要がありました。これは確かに Python ができる範囲内ですが、いくつかのリファクタリングで少し問題がありました。私は自分の AST の表現を変更し、メソッドとクラスを頻繁に変更していましたが、C++ ソリューションで利用できる強力な型付けを見逃していることに気付きました。Python のダック タイピングはほとんど柔軟性がありすぎassertたので、プログラムの実行時に型をチェックするために大量のコードを追加していることに気付きました。そして、100% のコード カバレッジ テストを行わない限り、すべてが適切に入力されていることを確認することはできませんでした (当時は行っていませんでした)。

実は、それは私が時々見逃している別のものです。Python で構文的に正しいコードを書いても、実行されない可能性があります。コンパイラは、実際にコードを実行するまでそれを知らせることができないため、エラー ハンドラなどの使用頻度の低いコード パスには、目に見えないバグが潜んでいる可能性があります。% 書式文字列を使用してエラー メッセージを出力するような単純なコードでも、型の不一致が原因で実行時に失敗する可能性があります。

私は GUI に Python を使用したことがないので、その点についてコメントすることはできません。

于 2008-08-30T07:22:03.677 に答える
8

Python は (Python プログラマの間で :) ラピッド プロトタイピングに最適な言語であると考えられています。無関係な構文が思考プロセスの邪魔になることはあまりないので、行う作業のほとんどはコードに集中する傾向があります。(優れた C++ を書く場合よりも、優れた Python コードを書く場合に必要なイディオムははるかに少なくなります。)

これを考えると、ほとんどの Python (CPython) プログラマーは、「時期尚早の最適化は諸悪の根源である」という哲学に帰することができます。高レベルの (そして非常に遅い) Python コードを作成することで、アプリケーションが完成に近づいたときに、C/C++ バインディングを使用してボトルネックを最適化できます。この時点で、適切なプロファイリングによって、プロセッサを集中的に使用するアルゴリズムが何であるかがより明確になります。このようにして、コードの大部分を非常に読みやすく保守しやすい方法で記述し、将来のスピードアップを可能にします。まさにこの理由から、C で記述された Python ライブラリ モジュールがいくつか表示されます。

とにかく、Python (つまり wxPython) のほとんどのグラフィック ライブラリは、C++ ライブラリの単なる Python ラッパーであるため、ほとんどの場合、C++ バックエンドに書き込みます。

IDE の質問に答えるために、SPE (Stani の Python Editor) は私が使用した優れた IDE であり、 PyDevを使用したEclipseも同様に仕事を成し遂げます。どちらも OSS ですので、無料でお試しいただけます。

[編集] @Marcin: Python で > 30k LOC を書いた経験はありますか? また、Python の最大の支持者である Google のスケーラビリティに関する懸念に言及する必要があるのも面白いことです。また、NASA という小さな組織も Python を頻繁に使用しています

于 2008-08-30T08:21:18.837 に答える
5

の答えに追加するものは何もありませんが、 Pythonを選択する場合は、これまで誰も言及していないpylintのようなものを使用する必要があります。

于 2008-11-04T22:44:46.163 に答える
4

Python が何に使用されているかを判断する 1 つの方法は、現時点で Python を使用している製品を調べることです。このウィキペディアのページには、さまざまな Web フレームワーク、コンテンツ管理システム、バージョン管理システム、デスクトップ アプリ、および IDE を含む長いリストがあります。

ここにあるように- 「Python を使用する最大のプロジェクトのいくつかは、Zope アプリケーション サーバー、YouTube、および元の BitTorrent クライアントです。Python を使用する大規模な組織には、Google、Yahoo!、CERN、および NASA が含まれます。ITA は、いくつかのプロジェクトで Python を使用します。そのコンポーネントの。」

要するに、はい、「スタンドアロンの複雑なアプリケーションの開発における本番使用に適しています」。他の多くの言語も同様で、さまざまな長所と短所があります。特定のユースケースに最適な言語は主観的すぎて答えられないため、試しませんが、多くの場合、答えは「開発者が最もよく知っている言語」になります。

于 2008-08-30T18:42:19.873 に答える
3

大規模なコードベースではリファクタリングは避けられず、静的型付けがないため、静的型付け言語よりもPythonでこれがはるかに困難になります。

于 2008-08-30T09:53:02.970 に答える
1

Python は使用するのが楽しいです。私はそれを日常的に使用しており、C# で作業するための多くのコードも記述しています。Python で UI コードを記述することには、2 つの欠点があります。1 つは、コミュニティの大多数に受け入れられている単一の UI フレームワークがないことです。C# で記述する場合、.NET ランタイムとクラス ライブラリはすべて連携して動作するようになっています。Python では、すべての UI ライブラリに独自のセマンティクスがあり、プログラムを作成しようとしている Python の考え方とはしばしば相容れません。私は図書館の作者を責めているわけではありません。いくつかのライブラリ (wxwidgets、PythonWin[MFC のラッパー]、Tkinter) を試しましたが、そうすると、Python 以外の言語でコードを書いているように感じることがよくありました (Python であるという事実にもかかわらず)。 t 正確に pythonic それらは、c、c++、tk などの別の言語からの移植です。

したがって、私は、IDE とライブラリの一貫性のために、UI コードを .NET (私にとっては C#) で記述します。しかし、可能であれば、ビジネス ロジックを Python で記述します。その方が明確で楽しいからです。

于 2008-11-13T08:12:21.880 に答える
1

そして、私が知る限り、Google 内でも多くの Python を使用しています。

私が間違っていなければ、Pythonのメーカーはまだグーグルで働いていますか?

Python の使用に関しては、スタンドアロン アプリに最適な言語だと思います。これは多くの Linux プログラムで頻繁に使用されており、GUI の開発を支援する優れたウィジェット セットがいくつかあります。

于 2008-11-13T07:36:28.833 に答える
0

DjangoまたはPylonsを試して、両方を使用して簡単なアプリを作成し、どちらが最適かを判断してください。他にも(TurbogearsやWerkzeugなど)ありますが、最もよく使用されています。

于 2010-08-10T01:51:26.913 に答える
0

私はおそらく明白なことを述べていると思いますが、開発チームの質とテクノロジーへの精通度が、提供する能力に大きな影響を与えることを忘れないでください。

あなたが強力なチームを持っているなら、彼らが精通していればそれはおそらく問題ではありません。しかし、テクノロジーに精通していない9〜5歳以上の人がいる場合は、より多くのサポートが必要になります。そのサポートのコストが何であれ、生産性の向上に見合う価値がある場合は、電話をかける必要があります。

于 2008-08-30T09:49:27.003 に答える
0

Python の経験は 1 つだけで、私の Trash-cli プロジェクトです。

おそらく一部またはすべての問題は、Python の経験不足に依存していることを知っています。

私はこれらのことをイライラさせました:

  1. 無料で優れた IDE を見つけることの難しさ
  2. 自動リファクタリングの限定的なサポート

さらに:

  1. 2 レベルのグループ化パッケージとモジュールを導入する必要があるため、私は混乱します。
  2. 広く採用されているコード命名規則はないように思えます
  3. 不完全な標準ライブラリAPIドキュメントがいくつかあるようです
  4. 一部の標準ライブラリが完全にオブジェクト指向ではないという事実は、私を悩ませます

一部のPythonコーダーは、これらの問題はないと言っていますが、問題はないと言っています。

于 2008-11-10T10:03:07.757 に答える