タグ付けされた質問 「python」

Pythonは動的に型付けされた、高レベルのインタープリタ型プログラミング言語です。その設計は、明確な構文、オブジェクト指向プログラミングへの直感的なアプローチ、および物事を明確にする正しい方法を作ることに焦点を当てています。Pythonはモジュールと例外をサポートし、広範な標準モジュールライブラリを備えています。Pythonは汎用であり、Webから組み込みシステムまで幅広く使用されています。

5
重複する範囲を平坦化するアルゴリズム
重複する可能性のある数値範囲のリストを平坦化(分割)する良い方法を探しています。問題は、この質問の問題と非常に似ています。重複する日付範囲を分割する最も速い方法、および他の多くの方法です。 ただし、範囲は整数だけではなく、JavascriptやPythonなどで簡単に実装できる適切なアルゴリズムを探しています。 サンプルデータ: ソリューション例: これが重複している場合はおApびしますが、解決策はまだ見つかりません。

4
(Python)言語の変更に対応するための戦略
今から何年も実行されるコードを書く プログラミング言語が変わります。ライブラリが変更されます。5年、10年、または20年前のコードも実行され、期待どおりの結果が得られる場合がありますが、2年前のコードは構文エラーで失敗する場合があります。言語は進化しているため(少なくとも、ほとんどは進化しているため)、これは部分的に避けられません。開発者には、コードを維持する責任があります。しかし、生産コードでは安定性が重要な要件である場合があり、コードを毎年変更して言語の変更に適応させる必要なく、コードを10年間実行する必要があります。または、たとえば科学データ分析用の小さなスクリプトがあり、それらを何年も触れなかった後に再訪する必要があるかもしれません。たとえば、気象庁では、速度が重要ではない部分にも多くの操作可能なFortranコードがあり、コードの安定性が理由の1つです。私' 不安定性への恐怖は、Pythonへの移行に対する彼らのオブジェクトの1つです(もちろん、言語のinertia性は別として、古いコードに依存しない新しいコードに対してのみ可能です)。もちろん、安定したコードの1つの戦略は、オペレーティングシステム全体を凍結することです。しかし、それは常に実現可能ではありません。 例としてPythonを使用していますが、問題は特にPythonに限定されません。 Pythonの互換性の問題に関するドキュメント Pythonの場合、後方互換性のない変更に関するポリシーの概要を示すドキュメントがいくつかあります。 PEP-5 PEP 5によると: Pythonの移行バージョンのリリースと後方互換性のないバージョンのリリースとの間には、少なくとも1年間の移行期間が必要です。ユーザーは、少なくとも1年はプログラムをテストし、非推奨の構成の使用から別の構成に移行する必要があります。 個人的には、1年はかなり短いと思います。つまり、コードを書く可能性がありますが、1.5年後にはもう実行されなくなります。 PEP 291 PEP 291には、下位互換性を維持するために避けるべき事項のガイドラインの不完全なリストが含まれています。ただし、Python 2.xのみに関連します。Python 2.7は2.xシリーズの最終リリースであり、Python 2.7はバグ修正のみであるため、このPEPは歴史的な関心のみになりました。 PEP 387 下位互換性のない変更に関するPEP 387もあります。PEP 387はドラフトであり、公式のポリシーではありません。2009年6月、これはPython-ideasメーリングリストで議論されました。ディスカッションの一部では、開発者が言語の変更に対して堅牢なコードを作成する方法に焦点を当てました。ある投稿は、やってはいけないことに関するいくつかのアドバイスをリストしました: これに加えて、おそらくほとんどの場合に当てはまるいくつかのルールがあります:で始まるものを呼び出したり"_"、モンキーパッチを適用したり、自分以外のクラスのオブジェクトで動的クラス置換を使用したりしないでください、継承階層の深さに依存せず(たとえば、no ".__bases__[0].__bases__[0]")、DeprecationWarningsを生成せずにテストを実行し、他のライブラリから継承するクラスに属性を追加するときに潜在的な名前空間の競合に注意してください。しかし、これらすべてが1か所に書き留められているとは思いません。 さらに、「地雷原」(新機能が変更される可能性が高い)と「凍結領域」(ほとんど販売されていないAPIが変更されないことが実質的に保証されている)についていくつかの点がありました。アントワーヌ・ピトルーの引用: 「凍結領域」は、負の値(明示的な「地雷原」)ではなく、正の値(明示的なパブリックAPIと明示的に保証された動作)で定義する必要があると思います。そうしないと、いくつかの重要なものを地雷原に置くことを忘れ、後から互換性のない方法でそれらのものを変更する必要があるときに噛まれます。 このスレッドから結論は出ていないようですが、探しているものの中核にかなり近づいています。スレッドはほぼ4年前であるため、状況はおそらく変更または改善されています。どのような種類のコードが存続する可能性が高く、どのような種類のコードがより脆弱ですか? 移植のガイドライン 上記のドキュメントに加えて、各Pythonバージョンには移植ガイドラインが付属しています:Python 3.2への移植、Python 3.3への移植など。 便利な互換性 PEP 3151は、有用な互換性の概念を紹介してくれました。私自身の言葉で言えば、これは、コードが慎重に記述されている場合にのみ、言語開発者が互換性を維持するように注意する必要があるという考えに要約されます。それは実際に有用な互換性を定義するものではありませんが、上記のPEP 387の議論から引用したアイデアに似ていると思います。 プログラマーの観点から プログラマーとして、私はPythonが将来変化し、人々、特に私自身が、おそらく数年後に、1、2、または3つのマイナーバージョンアップのPythonバージョンでコードを実行しようとすることを知っています。すべてが互換性があるわけではありません。実際、失敗するコードを思い付くのは簡単です(かつて私が言ったコードに遭遇しましたif sys.version[:3] != '2.3': print 'Wrong version, exiting')。私が探しているのガイドラインのセットです何をすべきか、何 ではない 行うには、私のコードはまだ将来的に変更されていない実行される可能性を高めるため。 そのようなガイドラインはありますか?将来も実行されるPythonコードを作成するにはどうすればよいですか? 私の質問は、Pythonコアとその標準ライブラリだけでなく、一般的に使用されるアドオンライブラリ、特にnumpy、scipyにも関連していmatplotlibます。 編集:これまでのところ、答えの2つはpython2対python3に関連しています。これは私が言っていることではありません。Python2からPython3に移行するツールについて知っています。私の質問はまだ来ない言語変更に関連しています。より安定したコーディングガイドラインを見つけるには、クリスタルボールよりも優れています。例えば: …
16 python 

10
アルゴリズムプログラミングのためのC上のPythonの優先
私は少しアルゴリズムを勉強していて、SPOJ.pl TopCoderなどのサイトを見てきました。プログラマーは通常、ほとんどのアルゴリズムプログラミングコンテストでCまたはC ++を好むことがわかりました。 今、私は最近いくつかの問題を抱えています。私は少しのCとPythonの両方を知っています。コードを書き込もうとすると、ほとんどのアルゴリズムでCよりPythonを好むようです。CIでコードを書くために座るたびに、約15分後にあきらめます。これは面倒で、Pythonに移行する傾向があるためです。マトリックスポインターなどを渡すことは、無駄な時間の無駄であるように思われ、実際にアルゴリズム自体について考えるために利用できます。 今、私はCが非常に重要な言語であり、多くのプログラマーのパンとバターであ​​ることを多くの人々から知っています。 私が知りたかったのは、私のこのアプローチに欠点/結果/欠点などがあるかどうかでした。 これはPython対Cの議論ではありません。これは、使いやすさのためにCよりもPythonを好むというこの特定の慣行が、長期的には私や他のプログラマー/コンピューター科学者にどのように影響するかについての質問です。 私は、これらの言語を業界で使用したことのある人々から、および/または大規模なソフトウェア/ライブラリなどを開発したいのです。

11
Pythonがエントリレベルのプログラミング言語として推奨されるのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 P.SEについては、初心者プログラマがPythonを最初のプログラミング言語として選択することをお勧めします。 誤解しないでください、私はPythonが好きです。それは大好きです!しかし、その哲学は「私たちは全員ここで大人に同意している」ことを中心に展開しています。 経験/知識の観点から見ると、初心者プログラマーは大人ではありません。それはちょっと傷を乗り越えても足で自分を撃ち、いくつかの悪い習慣を拾いやすくなることを意味します。 「より静的な」言語では、制限が厳しくなるため、自分自身を足で撃つことは難しくなると考えています。 質問に戻ります。Pythonがエントリレベルのプログラミング言語として推奨されるのはなぜですか? プログラミング言語を教えるのに適している点は何ですか。または...アドバイザーの個人的な好みですか?

6
インタプリタ言語で記述されたコードがクライアントに表示されないようにするにはどうすればよいですか?
Pythonでかなり複雑なインタープリタープログラムを構築しています。私はこのコードの大部分を他の目的で数か月間作業してきたので、クライアントが単純にコピーして販売しようとするのは望ましくありません。 問題は、クライアントが支払っているサーバーでスクリプトを実行する必要があるため、マシン上の特定のフォルダーをルートアクセスから保護する方法、または特定の使用者のみがディレクトリにアクセスできるようにする方法があります?OSはUbuntuです。

5
Rubyを学習する際にPython開発者は何を知っておくべきですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 私は約18か月のPythonプログラマーであり、1つのインターンシップといくつかのサイドプロジェクトで構成されており、自分はこの言語にかなり慣れていると思います。 ただし、プログラミング分野ではRubyに多くの注意が向けられているようですが、Pythonにはあまり注目されていません。 それでは、Rubyを学習する際に、Rubyの単なる悪い習慣であるPython的なものがあるでしょうか?何に注意し、何を避けるべきですか?

6
近似等式を使用したフロートハッシュの実装方法
次のPythonクラスがあるとしましょう(問題はJavaにもequalsandと同じように存在しますhashCode) class Temperature: def __init__(self, degrees): self.degrees = degrees ここでdegrees、フロートとしてのケルビンの温度です。今、私はのための平等のテストやハッシュを実装したいTemperatureという方法で、 直接等価テストではなく、イプシロンの差までフロートを比較します。 をa == b意味する契約を尊重しhash(a) == hash(b)ます。 def __eq__(self, other): return abs(self.degrees - other.degrees) < EPSILON def __hash__(self): return # What goes here? Pythonのドキュメントでは、数値をハッシュすることについて少し説明してhash(2) == hash(2.0)いますが、これはまったく同じ問題ではありません。 私は正しい軌道に乗っていますか?もしそうなら、この状況でハッシュを実装する標準的な方法は何ですか? 更新:現在、フロートのこのタイプの等価テストでは==、との推移性が排除されていることを理解していequalsます。しかし、フロートを直接比較するべきではないという「常識」とどのように結びついているのでしょうか?浮動小数点数を比較して等値演算子を実装すると、静的解析ツールが文句を言います。彼らはそうする権利がありますか?

1
マルチスレッドを使いすぎているかどうかはどうすればわかりますか?
現在、マルチスレッドを使いすぎているように感じます。 A、B、Cの3種類のデータがあります。 それぞれAを複数に変換できB、それぞれBを複数に変換できますC。 私はCsの治療にのみ興味があります。 これは、いくつかの変換関数を使用してかなり簡単に作成できます。しかし、スレッド、3つのキュー(queue_a、queue_bおよびqueue_c)で実装することに気づきました。異なる変換を実行する2つのスレッドと1つのワーカーがあります。 ConverterA読み取りqueue_aおよび書き込みqueue_b ConverterB読み取りqueue_bおよび書き込みqueue_c Worker 各要素を処理します queue_c 変換は平凡であり、このモデルが複雑すぎるかどうかはわかりません。しかし、私には非常に堅牢なようです。各「コンバーター」は、データがキューに到着する前でも動作を開始でき、コード内の任意の時点で新しいAsまたはBsを「送信」するだけで、ワーカーによってジョブをトリガーする変換パイプラインをトリガーします。糸。 結果のコードでさえ、よりシンプルに見えます。しかし、単純なスレッドを悪用しているかどうかはまだわかりません。

1
マイクロソフトがIronRubyとIronPythonを放棄したのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 数年前、MicrosoftはRubyとPythonが.netに登場することを発表しました。プロジェクトはそれぞれIronRubyおよびIronPythonと呼ばれていました。Microsoftは、プロジェクトは.net DLRの上に構築されると述べた。 WIKIpediaは、すべての意図と目的のために、これらのプロジェクトがマイクロソフトによって放棄されたことを示しています。 なぜマイクロソフトはこれらのプロジェクトを放棄したのですか?
15 .net  python  ruby  microsoft 

4
成功または失敗が唯一の懸念事項である場合にブール値を返す
多くの場合、複数の場所で使用されているメソッドからブール値を返すことで、そのメソッドに関するすべてのロジックを1か所に収めています。(内部)呼び出しメソッドが知る必要があるのは、操作が成功したかどうかだけです。 私はPythonを使用していますが、質問は必ずしもその言語に固有のものではありません。考えられる選択肢は2つだけです 例外は発生しますが、状況は例外ではありません。関数が呼び出されるすべての場所でその例外をキャッチすることを忘れないでください 私がやっているようにブール値を返します。 これは、私が話していることを示す本当に簡単な例です。 import os class DoSomething(object): def remove_file(self, filename): try: os.remove(filename) except OSError: return False return True def process_file(self, filename): do_something() if remove_file(filename): do_something_else() 機能的ではありますが、私はこのようなやり方を本当に嫌いです。「臭い」がし、場合によっては入れ子にされたifが大量に発生することがあります。しかし、もっと簡単な方法は考えられません。 os.path.exists(filename)削除を試みる前に、よりLBYLの哲学に目を向けて使用することもできますが、その間にファイルがロックされないという保証はありません(可能性は低いですが可能です)し、削除が成功したかどうかを判断する必要があります。 これは「受け入れられる」設計ですか。そうでない場合、これを設計するより良い方法は何でしょうか?

4
一部のプログラマーがC、Python、C ++を異なるカテゴリーに分類するのはなぜですか?-レベルについて
私はpythonの入門コースを受講しており、講師はpythonは高レベル言語であり、CおよびC ++は低レベル言語であると言っています。紛らわしいです。C、C ++、Python、Javaなどはすべて高レベル言語だと思いました。 私はC、C ++などのstackoverflowで質問を読んでいたが、それらはすべてそれらの言語を高レベルと呼んでいるようだ。一部のプログラマーはこれらの用語を同じ意味で使用しているようです。

5
monkeypatchingは優れたプログラミング手法と見なされていますか?
私は、モンキーパッチングは、標準的な優れたプログラミング慣行というよりも、迅速で汚れたハックのカテゴリーに属するという印象を受けていました。サードパーティのライブラリのマイナーな問題を修正するために時々使用していましたが、一時的な修正と考え、サードパーティのプロジェクトに適切なパッチを提出しました。 ただし、主流プロジェクト、たとえばGeventのgevent.monkeyモジュールでこの手法が「通常の方法」として使用されているのを見てきました。 モンキーパッチは、主流であり、通常の、受け入れ可能なプログラミングプラクティスになりましたか? 参照:ジェフ・アトウッドによる「人間のためのモンキーパッチング」

2
多くの小さなスクリプト、1つのリポジトリ、または複数ですか?
同僚と私は、複数の意見を持っている問題に遭遇しました。 現在、すべてのcronジョブを保持しているgitリポジトリがあります。約20のcronがあり、それらはすべて小さなpythonスクリプトであり、いくつかのアクティビティに不可欠であるという事実を除き、実際には関連していません。すべてのスクリプトの要件fabric.pyを展開するrequirements.txtファイルと管理するファイルを使用しています。 私たちの問題は、基本的に、これらのスクリプトをすべて1つのgitリポジトリに保持するのか、それとも独自のリポジトリに分離する必要があるのか​​、ということです。それらを1つのリポジトリに保持することで、1つのサーバーに簡単に展開できます。すべてのスクリプトに1つのcronファイルを使用できます。 ただし、20個のcronジョブは論理的に関連していないため、これは間違っていると感じています。さらに、requirements.txtすべてのスクリプトに1つのファイルを使用する場合、特定のスクリプトの依存関係を把握するのは困難であり、それらはすべて同じバージョンのパッケージを使用する必要があります。 すべてのスクリプトを独自のリポジトリに分離することもできますが、これにより20の異なるリポジトリが作成され、それらを覚えて処理する必要があります。これらのスクリプトのほとんどはそれほど大きくなく、その解決策は行き過ぎているようです。 関連する質問は、すべてのcronジョブに1つの大きなcrontabファイルを使用しますか、それとも個別のファイルを使用しますか?それぞれが独自のものを持っている場合、あるcrontabのインストールは他の19の上書きをどのように回避しますか?これはまた、20種類のcronファイルを追跡する必要があるため、苦痛のように思えます。 要するに、私たちの主な質問と問題は、それらをすべて1つのリポジトリとして密接にバンドルしたままにするのか、それとも独自のrequirements.txtとfabfile.pyを使用して独自のリポジトリに分けるのですか?私たちは、おそらくいくつかの本当に簡単な解決策も検討しているように感じます。この問題に対処する簡単な方法はありますか?

2
フックとは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 さまざまなプログラミング記事でこの用語フックに出くわし続けます。しかし、それらが何であり、どのように使用できるのか理解できません。そこで、フックの概念を知りたいだけです。特にWeb開発のコンテキストで、誰かが私をいくつかの例にリンクできれば、それは素晴らしいことです。

2
Pythonのフロー制御のベストプラクティスの例外はありますか?
私は「Learning Python」を読んでいて、次のことに出くわしました。 ユーザー定義の例外は、エラー以外の条件を通知することもできます。たとえば、呼び出しルーチンが解釈するためのステータスフラグを返す代わりに、一致が見つかったときに例外を発生させるように検索ルーチンをコーディングできます。以下では、try / except / else例外ハンドラーがif / else戻り値テスターの作業を行います。 class Found(Exception): pass def searcher(): if ...success...: raise Found() # Raise exceptions instead of returning flags else: return Pythonは動的に型付けされ、コアに対してポリモーフィックであるため、このような状態を通知するには、センチネルの戻り値ではなく例外が一般的に推奨される方法です。 この種のことはさまざまなフォーラムで何度も議論され、StopIterationを使用してループを終了するPythonへの参照は何度も見ましたが、公式のスタイルガイドにはあまり見当たりません(PEP 8にはフロー制御の例外への参照があります)または開発者からの声明。これがPythonのベストプラクティスであると述べる公式なものはありますか? これ(制御フローとしての例外は深刻なアンチパターンと見なされますか?その場合、なぜ?)には、このスタイルがPythonicであるとコメントするコメントもあります。これは何に基づいていますか? TIA

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.