タグ付けされた質問 「python-3.x」

23
科学的コードを書くときのきれいなプログラミング
私は大規模なプロジェクトを実際に書いていません。私は巨大なデータベースを維持したり、何百万行ものコードを扱ったりしていません。 私のコードは、主に「スクリプト」タイプのもの-数学関数をテストするためのもの、または何かをシミュレートするためのもの-「科学プログラミング」です。ここまでに取り組んだ最長のプログラムは数百行のコードであり、私が取り組んでいるプログラムのほとんどは約150行です。 私のコードもがらくたです。先日私が書いたファイルを見つけようとしていたので、これに気づきましたが、おそらく私は上書きしており、バージョン管理を使用していないことを知っています。これはおそらく私の愚かさに多くの人が苦しんでいます。 私のコードのスタイルは複雑で、何かを行う別の方法を記した古いコメントや、コピーされたコード行で満たされています。変数名は常に非常にわかりやすく説明的に始まりますが、たとえば、誰かがテストしたい新しいものを追加または変更すると、コードが上にオーバーレイされて上書きされます。このことをすぐにテストする必要があると思うので、私は安っぽい変数名を使用し始め、ファイルがポットに行くフレームワークを持っています。 私が現在取り組んでいるプロジェクトでは、私はこれらすべてが私に大きな意味で噛み付いてくる段階にあります。しかし、問題は(バージョン管理を使用し、新しい反復ごとに新しいファイルを作成し、そのすべてをどこかにテキストファイルに記録することを除いて、状況を劇的に改善する可能性があります)私の実際のコーディングスタイル。 より小さなコードを書くために単体テストは必要ですか?OOPはどうですか?大規模なプロジェクトで作業するのではなく、「科学的プログラミング」を行うときに、適切でクリーンなコードを迅速に記述するのにどのようなアプローチが適していますか? 多くの場合、プログラミング自体はそれほど複雑ではないため、これらの質問をします。私がプログラミングでテストまたは研究しているのは、数学または科学に関するものです。たとえば、2つの変数と関数がおそらくそれを処理できる場合、クラスは必要ですか?(これらは一般に、プログラムの速度が速いほうが望ましい状況であると考えてください-シミュレーションの25,000,000以上のタイムステップを実行しているとき、それを望んでいます。) おそらくこれは広すぎるので、もしそうなら、私は謝罪しますが、プログラミングの本を見ると、しばしばより大きなプロジェクトで対処されているようです。私のコードはOOPを必要とせず、すでにかなり短いので、「ああ、でもそうすればファイルは1000行減ります!」これらの小さくて高速なプロジェクトで「やり直す」方法ときれいにプログラムする方法を知りたいです。 私はもっ​​と具体的な詳細を提供したいのですが、アドバイスがより一般的であればあるほど、役に立つと思います。Python 3でプログラミングしています。 誰かが重複を提案しました。標準のプログラミング標準を完全に無視することについては話していないことを明確にしましょう。明らかに、これらの標準が存在する理由があります。しかし、一方で、いくつかの標準的なことを実行できたときにOOPと呼ばれるコードを書くことは本当に意味がありますか?プログラム? 例外があります。さらに、科学的なプログラミングには、単なる標準を超えた標準がおそらくあります。私もそれらについて尋ねています。これは、科学的なコードを書くときに通常のコーディング標準を無視すべきかどうかではなく、きれいな科学的なコードを書くことです! 更新 「まったく1週間後ではない」種類の更新プログラムを追加すると思いました。あなたのアドバイスはすべてとても役に立ちました。現在、バージョン管理を使用しています-git、グラフィカルインターフェイス用のgit kraken。非常に使いやすく、ファイルを大幅にクリーンアップしました。古いファイルを残したり、「念のため」に古いバージョンのコードをコメントアウトしたりする必要はもうありません。 また、pylintをインストールし、すべてのコードで実行しました。最初に1つのファイルが負のスコアを獲得しました。それがどのように可能だったのかさえ私には分かりません。私のメインファイルは、〜1.83 / 10のスコアから始まり、〜9.1 / 10になりました。すべてのコードは現在、標準にかなり準拠しています。また、自分の目で行った変数名を更新しました。 特に、私はこのサイトで最近の質問をして、私の主な機能の1つをリファクタリングしました。そして今ではずっときれいで短くなっています。サイズと何が起こっているかを把握するのがはるかに簡単です。 次のステップは、ある種の「単体テスト」を実装することです。つまり、メインファイルで実行できるファイルで、アサートステートメントとtry / exceptsを使用して、その中のすべての関数を調べます。これはおそらく最善の方法ではなく、多くの重複したコードになります。しかし、私は読み続けて、それをより良くする方法を見つけようとします。 また、すでに作成したドキュメントを大幅に更新し、Excelスプレッドシート、ドキュメント、関連するペーパーなどの補足ファイルをgithubリポジトリに追加しました。それは今や本当のプログラミングプロジェクトのように見えます。 だから...私はこれがすべてだと思います:ありがとう。

7
Pythonファイルを構成ファイルとして使用するのはどれほど悪い考えですか?
アプリケーションの構成には常にJSONファイルを使用しています。私は多くのJavaをコーディングしたときからそれらを使い始めましたが、現在は主にサーバーサイドとデータサイエンスのPython開発に取り組んでおり、JSONがこれ以上正しい方法であるかどうかはわかりません。 Celeryが実際のPythonファイルを構成に使用するのを見てきました。当初、私はそれについて懐疑的でした。しかし、構成に単純なPythonデータ構造を使用するという考えは、私に成長し始めています。いくつかの長所: データ構造は、通常コーディングしているものと同じです。そのため、心のフレームを変更する必要はありません。 私のIDE(PyCharm)は、構成とコードの関係を理解し​​ています。Ctrl+ Bを使用すると、構成とコードを簡単に切り替えることができます。 IMOの不要な厳密なJSONを使用する必要はありません。二重引用符、末尾のコンマ、コメントはありません。 作業中のアプリケーションでテスト構成を作成し、変換やJSON解析を行わずに簡単に構成ファイルに移植できます。 本当に必要な場合は、構成ファイルで非常に簡単なスクリプトを実行することができます。(これは非常に制限されるべきですが。) だから、私の質問は次のとおりです。切り替えた場合、どのように自分の足を撃ちますか? 熟練していないエンドユーザーが構成ファイルを使用することはありません。構成ファイルへの変更はすべてGitに現在コミットされており、継続的な展開の一部としてサーバーにロールアウトされています。緊急事態があるか、開発中でない限り、手動で構成を変更することはありません。 (私はYAMLを検討しましたが、それについて何かが私をいらいらさせます。それで、今のところ、それはアメリカのテーブルから外れています。)

2
一部の言語が最も近いEVEN整数に丸められるのはなぜですか?
Scheme(R5RS)やPython(この質問を参照)などのプログラミング言語は、値が周囲の整数の間に正確に収まる場合、最も近い偶数の整数に向かって丸めます。 この背後にある理由は何ですか? 次の計算を推論しやすくする数学的なアイデアはありますか? (R5RSは、この動作のソースとしてIEEE浮動小数点標準を参照しています。)

3
Pythonにリスト用の「フラット化」関数がないのはなぜですか?
ErlangとRubyの両方には、配列を平坦化するための関数が付属しています。言語に追加するためのこのようなシンプルで便利なツールのようです。これを行うことができます: >>> mess = [[1, [2]], 3, [[[4, 5]], 6]] >>> mess.flatten() [1, 2, 3, 4, 5, 6] あるいは: >>> import itertools >>> mess = [[1, [2]], 3, [[[4, 5]], 6]] >>> list(itertools.flatten(mess)) [1, 2, 3, 4, 5, 6] 代わりに、Pythonでは、配列をゼロから平坦化するための関数を記述するという問題を経験する必要があります。これはばかげているように見えますが、配列の平坦化はよくあることです。これは、2つの配列を連結するためのカスタム関数を作成する必要があるようなものです。 私はこれを無駄にグーグルで検索したので、ここで質問しています。Python 3のような成熟した言語に10万のさまざまなバッテリーが含まれているのに、配列を平坦化する簡単な方法が提供されない特別な理由はありますか?そのような機能を含めるという考え方は、ある時点で議論され、拒否されましたか?

5
Pythonミックスインはアンチパターンですか?
私はpylint、他の静的分析ツールがすべてを知っているわけではないことを完全に認識しています。(これは、conventions だけでなく、さまざまなクラスのメッセージに適用されます。) 私のようなクラスがある場合 class related_methods(): def a_method(self): self.stack.function(self.my_var) class more_methods(): def b_method(self): self.otherfunc() class implement_methods(related_methods, more_methods): def __init__(self): self.stack = some() self.my_var = other() def otherfunc(self): self.a_method() 明らかに、それは不自然です。あなたが好きなら、これはより良い例です。 このスタイルは「ミックスイン」を使用して呼び出されると思います。 他のツールと同様に、pylintレートでこのコードを-21.67 / 10、主にそれは考えているためmore_methodsとrelated_methods持っていないselfか、属性otherfunc、stack、annd my_varのコードを実行せず、それは明らかに見ることができないためrelated_methodsとmore_methods混合でにしていますimplement_methods。 コンパイラーと静的解析ツールが停止問題を常に解決できるとは限りませんが、これは確かに、継承されたものを見るとimplement_methodsこれが完全に有効であることを示す場合であり、それは非常に簡単なことです。 なぜ静的解析ツールがこの有効な(私が思うに)OOPパターンを拒否するのですか? どちらか: 彼らは継承をチェックしようとさえしません mixinは慣用的で読みやすいPythonでは推奨されません #1は明らかに間違っています。なぜなら、を使用し pylintて継承する私のクラス(でのみ定義されているもの)について教えてもらえば、文句を言わないからです。unittest.TestCaseself.assertEqualunittest.TestCase ミックスインは非Pythonpythonですか、落胆しますか?

1
Python 3の新機能が解決する問題は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 Python 3の新機能は次のとおりです。 私たちは、よく知られている迷惑やいぼを修正し、多くの古い残骸を取り除きます 何が違うのか(修正)は言及されているが、なぜ(問題)は言及されていない。私は問題が何であるかを見つけていません。修正により解決される問題は何ですか?

2
Pythonで値を返す関数に名前を付けるにはどうすればよいですか?
Pythonで関数の名前を選択することについて混乱しています。時々 、Pythonは組み込み関数ですが不可欠のような:print機能と文字列の方法find。時々、それらは次のようなものではありません:lenその名前はcalculate_len、たとえばなどの命令型でtypeはなく、find_typeです。 これprintは、使用しない値(つまりNone)を返し、何かをする(つまり、画面に文字列を表示する)ため、その名前は必須です。 ただしlen、使用する値を返し、何かを実行します(つまり、シーケンスまたはマッピングに存在するアイテムの数を計算します)。その名前は必須ではありません。一方、find文字列メソッド(as len)は、使用する値を返し、何かを実行します。その名前は必須です。 この質問をしたのは、Caesar暗号を使用して文字列を暗号化および復号化するスクリプトをレビューに追加したことです。レビューアは次のように言った: ただの直感:関数は何かをします。したがって、関数の適切な名前は必須rotate_letterですrotated_letter。代わりにを使用します。 rotated_letter数字で回転した文字を表す1文字の文字列を返します。私はrotated_letterそれが値を返すのでrandint、ランダムモジュールの関数のように使用しましたが、そうではありませんgenerate_randint。 したがって、この場合、使用する値を返す関数にどのように名前を付ける必要がありますか?名前を必須にするべきか、それとも名詞にするべきか。他の場合では、次のような、それを行う方法は明らかですブール関数のような、is_evenそしてis_palindrome我々は同じようにそれを作るはい/いいえ質問し、また機能だけで行うと戻り未使用の値(つまり、Noneなど)、printおよびlistメソッドsort。

3
Pythonが最新のJavascript実装のように最適化されていないのはなぜですか?
V8(Chrome)、SpiderMonkey(Firefox)、Chakra(IE / Edge)などの最新のJavascript実装には、すべてJITコンパイルと、パフォーマンスを改善するためのその他の最適化がいくつかあります。 Pythonにこれらがないのはなぜですか? 私はPyPyとIronPythonを見てきましたが、どちらも速度の向上を主張しています。PyPyインタプリタ言語であるPythonで書かれたPython実装が、C。IronPythonのリファレンス実装よりも速くなる方法がわかりません。同じ考えですが、.NET Frameworkがどのように速度を上げるかわかりません。
11 python-3.x  jit 

4
ネストされた関数呼び出しの使用は悪いことですか?
最近の宿題でuglyReceipt(cashParser(cashInput()))は、プログラム自体が完璧に機能する醜い方法で関数を呼び出すことになりましたが、それでも何か間違ったことをしているように感じました。 関数の呼び出しはこのような悪い習慣であり、そうであれば、代わりに何をすべきですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.