私は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. 異なるデータ構造と複雑さ
- 2. Javaの複雑なデータ構造
- 3. MongoDB:複雑なデータ構造を構築する
- 4. C++での複雑なconst宣言
- 5. RequireJs - 複雑なディレクトリ構造
- 6. Perl:複雑なデータ構造の要素を計算する
- 7. Javaで定数階層データ構造を宣言するには?
- 8. 宣言構造の違い
- 9. 型宣言pythonエラー
- 10. インライン構造体宣言
- 11. 複雑なマップデータ構造をF#
- 12. を挿入し、複雑な構造に
- 13. 複雑なSQL構造の設計
- 14. jsonRest dojoの複雑な構造
- 15. 構造体をC言語で宣言せずに宣言する
- 16. C++で大規模で複雑な定数データ構造をエンコードする方法
- 17. データ構造の設計は静的型の言語です
- 18. 複雑なデータ構造からオブジェクトのインスタンスをすべて削除する
- 19. Cの構造体の前方宣言?
- 20. 出力ファイルを解析して複雑なデータ構造を作成する
- 21. node1がこのスコープで宣言されていないC++データ構造
- 22. Julia-LangでEnumデータ型を宣言する異なる方法
- 23. Python:SQLクエリを辞書に保存する(Bit複雑なデータ構造)
- 24. XML ::シンプルで複雑な構造にアクセスする
- 25. .NETとCOMの間で複雑なデータ型をマーシャリングする
- 26. DOMDocumentを使用して複雑な構造を作成する
- 27. 変わった構造体宣言
- 28. Cython再帰構造体宣言
- 29. 複雑な結合のモデル構造ですか?
- 30. SQLAlchemy(宣言的スタイル)のpythonプロジェクトを正しく構造化する方法unittests
いい名前を使用しますか? ;) – delnan
辞書が既知の固定キーセットを使用している場合は、C++のようにクラスを使用する方が自然かもしれません。それ以外の場合は、有益な名前を選択しようとします。 –
Russelに、コメントをいただきありがとうございますが、私は辞書が自分のコードでやるべきことに適していると思うので、クラスを使用することは非生産的です。しかし一般的に言えば、あなたのことを覚えておいてください。 –