私はPythonプログラミング(C/C++バックグラウンド)にはかなり新しいです。 私はリストの辞書の辞書のような複雑なデータ構造を使用する必要があるコードを書いています。 問題は、これらのオブジェクトを使用する必要があるときに、構造を覚えていて、アクセスする方法がほとんどないことです。 これにより、数日間修正されていないコードの作業を再開するのが難しくなります。 非常に貧弱な解決策は、各変数にコメントを使用することですが、それは非常に柔軟性がありません。 Python変数はメモリへのポインタに過ぎず、静的に型宣言することはできませんが、複雑なデータ構造の使用を容易にするためのコンベンションやルールはありますか?Pythonで複雑なデータ構造の型を宣言する
答えて
クラスにdocstringsを使用する場合は、help(vargoeshere)
を使用してその使用方法を確認できます。
答えがありがとう、すべてのことが考えられる最良の解決策は、コメントと自己説明的な変数名(もちろんハンガリー表記なし(感謝丸薬))を使用することです。 –
私はあなたの複雑な構造のいくつかを見て、あなたがそれらで何をしているのかを聞いて尋ねるべきだと思っています...これはPythonicですか?ここでSOに尋ねてください。私は複雑さがC/C++の人工物であるいくつかのケースを見つけると思います。
これは絶対に正しいです。私は自分のC/C++エクスペリエンスの影響を受けず、可能な限りPython指向のコードを書くように努めました。 –
コードのどこかに、またはテストの中の例を含めます。
何をしても、私は繰り返し、ハンガリー記法を使用しないでください!それは重度の脳を引き起こす&ビット腐敗。
あなたは何をすればよいですか? PythonとC/C++は全く異なっています。 Cでは、あなたは、通常のような多型のコールを処理++ので:C++での
void doWithFooThing(FooThing *foo) {
foo->bar();
}
ダイナミック多型は、継承に依存します。doWithFooThingに渡されたポインタが唯一FooThingまたはそのサブクラスの1つのインスタンスを指すことがあります。ないPythonでよう:ここ
def do_with_fooish(fooish):
fooish.bar()
、任意の十分fooishもの(呼び出し可能なバー属性を持つ、すなわちすべてが)に関係なく、それは継承によって、他のfooishのものにreleatedされるか、使用することはできません。
ここでのポイントは、C++ではすべてのオブジェクトにどのような(基本)タイプがあるのかを知っていますが、Pythonではそうではありません。あなたがPythonで達成しようとしているのは、クラス継承の厳格なルールの下で何かを強制する必要なしに、できるだけ多くの状況で再利用可能なコードです。あなたの命名にもそれが反映されるはずです。
def some_action(a_list):
...
しかし:seqがリストが、任意の反復可能シーケンスだけでなくかもしれない
def some_action(seq):
...
は、そのリスト、タプル、辞書、設定、反復子、何をすることをあなたが書くいけません。
一般に、型構造ではなくコードの意図を強調します。代わりに、書き込みの:
dict_of_strings_to_dates = {}
次のように記述:
users_birthdays = {}
また、それ以上にC/C++に比べて、短いの機能を維持するのに役立ちます。そして、あなたは何が起こっているのかを簡単に見ることができます。
別のこと:Python変数をメモリへのポインタと考えるべきではありません。彼らは実際にはdicionaryエントリーしている:そう正確常に
assert foo.bar == getattr(foo, 'bar') == foo.__dict__['bar']
ない、私は同意するが、詳細はdocs.python.org見上げことができます。
また、Pythonでは、はC/C++のようにと宣言していません。あなたはただものを定義します。
- 1. Pythonで複雑なデータ構造を作成する方法
- 2. 異なるデータ構造と複雑さ
- 3. ナンシーな複雑なデータ構造
- 4. Javaの複雑なデータ構造
- 5. Redisの複雑なデータ構造
- 6. 複雑なデータ構造の組合
- 7. Python、tkinter、複雑なダイアログとコード構造
- 8. EFプロキシと複雑なデータ構造
- 9. 新しい複雑な変数型を宣言する方法
- 10. MongoDB:複雑なデータ構造を構築する
- 11. JavaFXでリアルタイムで複雑なデータ構造を観察する
- 12. C++での複雑なconst宣言
- 13. 宣言構造体
- 14. 複雑なフォルダ構造でテストする
- 15. RequireJs - 複雑なディレクトリ構造
- 16. Cassandraのスプリングデータに複雑なデータ構造を使用する
- 17. Perl:複雑なデータ構造の要素を計算する
- 18. 複雑なデータ構造のリストを処理する方法
- 19. 複雑な構造を比較する
- 20. Pythonデータ構造の複雑さ/性能チェック
- 21. 宣言構造の違い
- 22. Javaで定数階層データ構造を宣言するには?
- 23. どのようにデータを複雑なデータ型 "構造体"に挿入するのですか?
- 24. Haskell:データ型の複数宣言
- 25. typescript - サブオブジェクトの構造を宣言する
- 26. 複雑なフォルダ構造によるMavenコンパイルの複雑さ
- 27. インライン構造体宣言
- 28. はなぜ構造体を作成した構造体宣言
- 29. Go Relflect構造体を宣言する
- 30. 難易度構造を宣言する
いい名前を使用しますか? ;) – delnan
辞書が既知の固定キーセットを使用している場合は、C++のようにクラスを使用する方が自然かもしれません。それ以外の場合は、有益な名前を選択しようとします。 –
Russelに、コメントをいただきありがとうございますが、私は辞書が自分のコードでやるべきことに適していると思うので、クラスを使用することは非生産的です。しかし一般的に言えば、あなたのことを覚えておいてください。 –