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

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

3
クラス内の属性を事前に初期化することをお勧めしますか、それとも途中で追加することですか?
これが絶対に二日酔いの質問である場合は申し訳ありませんが、ベストプラクティスがどこにあるのか興味があり、Googleで良い答えを見つけることができないようです。 Pythonでは、通常、空のクラスをスーパーキャッチオールデータ構造コンテナー(JSONファイルのようなもの)として使用し、途中で属性を追加します。 class DataObj: "Catch-all data object" def __init__(self): pass def processData(inputs): data = DataObj() data.a = 1 data.b = "sym" data.c = [2,5,2,1] これにより、コンテナオブジェクトは基本的に何でも保存できるため、非常に大きな柔軟性が得られます。したがって、新しい要件が生じた場合は、DataObjオブジェクトに別の属性として追加します(コードで渡します)。 しかし、最近、コードの読み取りが非常に難しくなるため、これはひどい慣行であると私(FPプログラマー)に感銘を受けました。すべてのコードを調べて、DataObjが実際に持っている属性を把握する必要があります。 質問:柔軟性を犠牲にすることなく保守性を高めるために、これをどのように書き直すことができますか? 関数型プログラミングから採用できるアイデアはありますか? 私はそこにベストプラクティスを探しています。 注:1つの考えは、遭遇することが予想されるすべての属性でクラスを事前初期化することです。例えば class DataObj: "Catch-all data object" def __init__(self): data.a = 0 data.b = "" data.c = [] def processData(inputs): data = …

3
Pythonでユニットテストのグローバルパラメータを適切に処理する方法は?
私たちは多くのアルゴリズムを実装していますが、それらは通常、多くの共有され、公に知られており、セキュリティ関連のパラメーターを持っています。 現在、すべてのパラメーターと2つの定義済みグローバルオブジェクトを保持するクラスを使用しています。 class PublicParams(object): p = q = 0 def __init__(self, p, q): self.p = p self.q = q # used for tests publicParams_test = PublicParams(15,7) # Some 2048 bit numbers for example publicParams_secure = PublicParams(128378947298374928374,128378947298374928374) その後、アルゴリズムはPublicParamsオブジェクトを引数として受け取り、デフォルトで生産的になりますpublicParams_secure def AlgoOne(n, publicParams = publicParams_secure): # do stuff with publicParams.p # ... AlgoTwo(x, …

2
インスタンスが1つだけのPythonクラス:(単一の)クラスインスタンスを作成するタイミングと、代わりにクラスを使用するタイミング
1回だけインスタンス化されるPythonクラスがある場合、つまり、クラスのオブジェクトは1つだけになります。クラスを直接操作するのではなく、単一のクラスインスタンスを作成する方が理にかなっているのではないかと思いました。 同様の質問がありますが、焦点は異なります。 グローバル変数と関数をクラスにグループ化することです Python固有ではありません。後者は、(Pythonで)クラスもオブジェクトであるという事実を考慮しないことを意味します。 更新: Pythonでは、クラスとオブジェクトの両方で次のことができます。 class A(object): pass A.some_state_var = True # Then later A.some_state_var = False my_a = A() my_a.some_state_var = True # Then later my_a.some_state_var = False そのため、クラスとそのクラスのインスタンスの間の選択が(Pythonで)状態に関するものであるかどうかはわかりません。どちらかで状態を維持できます。 さらに、クラス/クラスインスタンスを作成する動機は、シングルトン要件を強制することではありません。 また、新しいTypeを作成することはそれほど重要ではありません。 動機は、関連するコードとデータをグループ化し、それへのインターフェースを持つことです。これが、最初にクラス図のクラスとしてモデル化した理由です。実装に関してのみ、このクラスをインスタンス化するかどうか疑問に思い始めました。

4
Pythonで部分的な日付をモデル化するにはどうすればよいですか?未知の年、または未知の月の日?
Bob was born in 2000やのような事実をキャプチャできるようにしたいですBill's birthday is May 7th。 両方の例で、私たちはその人の生年月日の一部のみを知っています。1つのケースでは、年のみを知っています。他の場合、月と日は知っていますが、年はわかりません。 この情報を取得するにはどうすればよいですか? これがどのように機能するかのいくつかの例: フィールドでNoneが未知を表すことを許可したdatetimeのようなライブラリを想像してください。次のようなコードがあります。 date_a = date(2000, 5, None) date_b = date(2000, 6, None) difference = date_b - date_a assert difference.min.days == 1 assert difference.max.days == 60 # Or something close to 60. assert equal(date_a, date_b) == False date_c = date(2000, …
11 python 

2
コールグラフを描く
私はpythonで書かれた古いコードベースを維持しています。特に、モジュールから他の関数​​を呼び出す他のモジュールから他の関数​​を呼び出す複雑なコードがあります。OOPではなく、単なる関数とモジュールです。 メイン関数を呼び出すたびにフローの開始位置と終了位置を追跡しようとしましたが、サブコールで迷子になるため、これを描画する必要があると感じています。 私が心配しているのは、各関数が自分のタスクを完了し、呼び出し元に値を返すために、体内で複数の外部関数を呼び出すことです。 これをどうやって描くことができますか?この種の動作/コードを文書化するのに適切なチャート/グラフィックの種類は何ですか? したがって、UMLダイアグラムを作成するのに、フローチャートではなく、役に立つとは思いません。多分コールグラフ?

2
Pythonがハッシュテーブルを使用してdictを実装しますが、Red-Black Treeは使用しないのはなぜですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 Pythonがハッシュテーブルを使用してdictを実装しますが、Red-Black Treeは使用しないのはなぜですか? キーは何ですか?パフォーマンス?

3
プログラミング言語の内部を理解する必要がありますか?
私はPythonの初心者で、これまでのところ本当に気に入っています。よく頭に浮かぶ質問の1つは、プログラミング言語の内部構造を理解する必要があるかどうかです(したがって、私の場合はPythonです)。ご存知かもしれませんが、Python自体はCで書かれています。 だから私の質問は次のとおりです。この言語に堪能であるか流であるためには、プログラミング言語にどのくらい深く潜らなければならないのか。この質問を「自然な」言語と比較します。私は母国語の文法のすべての詳細を知りませんが、その言語で問題なく自分を表現することができます。これは私が言語に堪能だと言うときです。それはプログラミング言語にも当てはまりますか?

3
クロスプラットフォームのデスクトッププログラミング:C ++とPython [非公開]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 申し分なく、始めに、私はアマチュアObj-C / CocoaおよびRuby w / Railsプログラマーとしての経験があります。これらは素晴らしいですが、クロスプラットフォームのアプリケーションを書くのにあまり役に立ちません(GNUStepがいつか最初にマルチプラットフォームになるのに十分なものになることを願っていますが、その日は今日ではありません)。 私が収集できるものからのC ++は、非常に強力ですが、マスターするには半年以上かかる巨大でcanい巨人でもあります。また、メモリ管理はすべて手作業なので、足で自分自身を撃つだけでなく、足全体を吹き飛ばすことが非常に簡単にできることも読みました。明らかに、これはすべて非常に威圧的です。それが正しいか? PythonはC ++のパワーの大部分を提供しているようで、速度を犠牲にして簡単に入手できます。この犠牲の大きさは?それは意味がありますか、それとも無視できますか? 合理的な時間内に高速で安定した信頼性の高いアプリケーションを作成できますか? また、UIにQtを使用するか、プラットフォームごとに個別のネイティブフロントエンドを維持する方が良いでしょうか? 編集:さらに明確にするために、書きたいアプリケーションには2つのタイプがあります。1つは非常に使いやすく便利なデータベースフロントエンドであり、もう1つは間違いなく後で登場する3Dワールドエディターです。


2
ユーザーテキスト入力に基づいてリストから最も可能性の高いオプションを選択する方法
ユーザーのテキスト入力に基づいてオプションを選択する必要があるOCRアプリケーションで作業しています。 Ex: Available Options: ["python", "ruby", "java", "clojure", "haskell"] Input: kava Output: java Input: ruby Output: ruby Input: clujuro Output: clojure etc.. 私のアプリケーションはPythonベースですが、この問題を解決するためのアルゴリズムがすでに存在しますか?

10
Pythonプログラマーは空白の問題を不便だと感じていますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 多くのプログラマーは、最初にPythonに遭遇すると、空白の重要性にすぐに先送りされます。これが不便であるというさまざまな理由を聞いたことがありますが、Pythonプログラマーから苦情を聞いたことはありません。 もちろん、私は自分のキャリアをJavaの世界で過ごしてきたので、多くのPythonプログラマーに会ったことはありません。 だから私の質問は、大規模なPythonプロジェクト(Pythonが使用されている主要な言語である3か月以上)に参加している人たちに対するものです。それとも、フローに入ったら問題ではなかったのですか? Pythonに賛成か反対か、またはPythonの空白の使用に賛成または反対なので、私は質問をしていません。私はたまたまPythonが好きですが、私はPythonを大きなものに使ったことはありません。 Pythonの経験がない場合は、推測を提供しないでください。

7
Python / RubyとPHPを長い間使用していて、まだPHPを好む人はいますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 9年前に閉鎖されました。 私は通常、PHPを守る記事と使用されている議論に魅了されています。これらの種類の記事の著者は、他の言語でどのような経験をしたかについて言及しないことがよくあります。個人的には、誰かがPythonまたはRuby、そしてPHPを高いレベルで知っていて、それでもPHPを好むと想像するのは難しいと思います。 したがって、この説明に当てはまる人がいれば、これらの言語のいずれかよりもPHPを好む理由を聞いてみたいと思います。

5
JVMとJavaのWORAは、他の高レベル言語とどのように違いますか?
Javaの世界では、JVMについてよく話しますが、Javaが新しくなったとき、おそらく「Write Once、Run Anywhere」というキラー機能がありました。 人々が話したり書いたりする方法からすると、これは、たとえばPythonが機能する方法とは異なるようです。しかし、私が書いたPythonコードが別のマシンで異なる方法で動作することを認識していません。(私はそれほど多くのPythonを書いていませんが。) だから私は何が欠けていますか?JVMはPythonインタープリターとどう違うのですか?PythonにJavaのプラットフォームに依存しない方法はありますか?または、これは単なる文化的な違いですか?

3
Python 3.4以降では、dictを使用しないときにSimpleNamespaceでnamedtupleを使用する必要があるのはなぜですか?
ある時点で、多くの引数を持つ関数を見つけるかもしれません。いくつかの引数を組み合わせてスーパー引数にすることが理にかなっている場合があります。私はこれを口述筆記で頻繁に行ってきましたが、今はよりよい方法を検討しています。 回したい... def do_something(ax, ay, az, bu, bv, c): # Do something ...に... def do_something(a, b, c): # Do something ...場所aとbそのサブバリエーションを含みます。 これを行う1つの方法は、次のことです。 A = namedtuple('A', 'x, y, z') a = A(ax, ay, az) B = namedtuple('B', 'u, v') b = B(bu, bv) ただし、これはより簡単に見えます。 a = SimpleNamespace(x=ax, y=ay, z=az) b = …

1
依存性注入にPythonのメソッド解決順序を使用する-これは悪いことですか?
私はレイモンドヘッティンガーのPyconの講演「スーパー考慮スーパー」を見て、クラスの「親」クラスを決定論的な方法で線形化するPythonのMRO(メソッド解決順序)について少し学びました。これを使用して、以下のコードのように、依存性注入を行うことができます。だから今は当然、super何にでも使いたい! 次の例では、Userクラスは、LoggingServiceとの両方から継承することで、依存関係を宣言していUserServiceます。これは特に特別なことではありません。興味深いのは、メソッド解決順序を使用して、単体テスト中に依存関係を模擬できることです。以下のコードは、モックしたいメソッドのMockUserService継承UserServiceと実装を提供するを作成します。以下の例では、の実装を提供していますvalidate_credentials。へのMockUserService呼び出しを処理validate_credentialsするにUserServiceは、MROの前に配置する必要があります。これは、User呼び出されるラッパークラスを作成し、MockUserそれをUserand から継承させることで行われMockUserServiceます。 これを実行するMockUser.authenticateと、次に、への呼び出しがメソッド解決順序のsuper().validate_credentials() MockUserService前UserServiceにあり、validate_credentialsこの実装の具体的な実装が提供されるため、これが使用されます。いいですね- UserService単体テストでうまく模倣しました。UserServiceコストのかかるネットワークやデータベースの呼び出しが発生する可能性があることを考慮してください。これにより、レイテンシ係数が削除されました。また、UserServiceライブ/製品データに触れるリスクもありません。 class LoggingService(object): """ Just a contrived logging class for demonstration purposes """ def log_error(self, error): pass class UserService(object): """ Provide a method to authenticate the user by performing some expensive DB or network operation. """ def validate_credentials(self, username, password): print('> UserService::validate_credentials') return username == …

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