私は科学的プログラミングを行い、多くの場合、プロンプトと変数の組み合わせを表示し、変数を編集させてから、新しい変数を使用して計算を行います。私はこれを頻繁に行い、wxPythonクラスを作成してこのコードをメインプログラムから移動させました。変数のタイプ(string、float、int)、プロンプト、および変数の現在の値を使用して、各変数のリストを設定します。これらのリストをひとつの大きなリストに入れ、私のユーティリティはプロンプトと編集可能な現在の値を使ってきれいに整形されたwxPythonパネルを作成します。Pythonの関数との間でたくさんの変数を渡すにはどうしたらいいですか?
私が始めたとき、私はいくつかの変数しか持っていなかったので、私は各変数を書きます。
s='this is a string'; i=1; f=3.14
my_list=[ ['s','your string here',s], ['i','your int here',i], ['f','your float here'],]
input_panel = Input(my_list)
# the rest of the window is created, the input_panel is added to the window, the user is
# allowed to make choices, and control returns when the user hits the calculate button
s,i,f = input_panel.results() # the .results() function returns the values in a list
ここでは、このルーチンを多くの変数(10-30)に使用したいと考えています。このアプローチは壊れています。私はlist.append()ステートメントを使用して、関数への入力リストを複数の行に作成することができます。しかし、関数からコードが返ってくると、私はこの膨大なリストを正しい変数に展開する必要があります。これは管理が難しく、入力リストと出力リストを同期させるのが簡単になるようです。そしてそれより悪い、それはクルージングに見えます。
多くの変数をPythonの関数に渡して、余分な情報を付けて編集できるようにして、残りのプログラムで変数を使用できるようにするにはどうすればよいでしょうか?
変数を関数に渡すことができれば、ユーザーは変数を変更することもできないこともあります。関数から返された値を使用します。私は入力リストを複数の行に構築する必要があり、入力リストが出力リストと同期しなくなる可能性はありません。しかし、Pythonはこれを許可していません。
大きなリストを小さなリストに分割して、大きなリストにまとめて関数に出入りさせるべきですか?それとも、エラーを出す場所を追加するだけですか?
私が自分の人生で行った「検索プロパティ」クラスの数をカウントできません。 +1 –
間違いなく、クラスから始まります。次に、複数のクラスに分割できるデータや、クラスに移動できるビヘイビアを見つけることができます。しかし、引数オブジェクトの作成が最初のステップです。 –
科学的ソフトウェアを運営する会社で働く人として、私はこれが正しいアプローチだとも考えています。変数全体を渡すことによって、あなたは基本的に問題のドメインのモデリングをあきらめています。代わりに、オブジェクトのコレクションとしてより論理的な意味で問題を具体化するクラス階層を構築することができます。 10-30の可変関数呼び出しは、学術の科学的背景から来るアマチュアプログラマーの典型的な兆候です。 –