質問

い科学プログラミングとよくしたいユーザーに促し、変数の組で、編集、変数、およびその他のcalulationsの新しい変数です。いこう、その書いたwxPythonクラスに移動このプログラムになります。設定一覧の各変数の型変数(string,float,int)を迅速かつ、変数の現在の値です。またすべてのこれらのリストと一緒に、一つの大きなリスト、光を綺麗にformated wxPythonパネルに促し、現在の値を編集することができます。

始めたときは、私みた変数のようなので書き出します。

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、このアプローチである。を作成しますの入力一覧表には、機能の複数回線を使用します。append()記述です。のコードを返しますから、もうこのリストのニーズ展開されるための変数です。この困難な管理するように見えますので、入力一覧表および出力一覧。となるのではないかとのことでkludgy.

何のパスを多変数関数にPythonの追加の情報のように編集することができ、その後の変数の裏できるよう、使ってもらうにはどうすればいいですか?

また、変数を参照の機能、そしてユーザーに変えていく価値を一度にプログラムから返されます。私はみなさんも、入力リストで複数のラインとはないと思います他の可能性を秘めの入力一覧表の出力に同期し、一覧です。がPythonすることを認めていません。

すべいただくこともできましたが、大きなリストより小さいリストが、それらを組み合わせ大スパの性能においまたはこれだけで追加の場所に誤?

役に立ちましたか?

解決

最も簡単な方法は、クラスを作成することです。代わりに、変数のリストを扱う、クラスが属性を持っています。次に、あなただけのクラスの単一のインスタンスを使用します。

他のヒント

頭に浮かぶ2つのまともなオプションがあります。

最初は一箇所ですべての変数を収集するために辞書を使用することです。

d = {}
d['var1'] = [1,2,3]
d['var2'] = 'asdf'
foo(d)

二つ目は、すべての引数をバンドルしたクラスを使用することです。これは、ような単純なものになる可能性があります:

class Foo(object):
    pass
f = Foo()
f.var1 = [1,2,3]
f.var2 = 'asdf'
foo(f)

この場合、私はあなたが最終的にその使用をより明確にしたり、梱包や開梱作業の一部を処理する方法を提供するために、クラスの定義を提供できるという理由だけで、辞書上のクラスを好むだろう。

私にとって、理想的なソリューションは、このようなクラスを使用することです。

>>> class Vars(object):
...     def __init__(self, **argd):
...             self.__dict__.update(argd)
...
>>> x = Vars(x=1, y=2)
>>> x.x
1
>>> x.y
2

また、辞書を構築し、このようにそれを渡すことができます:

>>> some_dict = {'x' : 1, 'y' : 2}
>>> #the two stars below mean to pass the dict as keyword arguments
>>> x = Vars(**some_dict)  
>>> x.x
1
>>> x.y
2

あなたはその関数に渡す時にもデータを取得したり、必要として、それを変更することができます

>>> def foo(some_vars):
...     some_vars.z = 3 #note that we're creating the member z
...
>>> foo(x)
>>> x.z
3

また、変数を参照の機能、そしてユーザーに変えていく価値を一度にプログラムから返されます。

を得ることができっと同じ効果"を通基準"により dict (統語的利便性、 Bunch, 参照 http://code.activestate.com/recipes/52308/).

を使用すると、これらのケースの有限集合を持っている場合、あなたは、それぞれに固有のラッパー関数を書くことができます。各ラッパーが構築した内部関数に渡されtahtリストを開梱作業を行うだろう。

  1. 辞書またはクラスを使用して、変数に関するすべての詳細を蓄積することをお勧めします
    • 価値
    • プロンプトテキスト
  2. 表示する順序を保存するリスト
  3. 次に、古き良き反復を使用して入力を準備し、出力を収集します

こうすることで、コードの管理可能な小さなセクションのみを何度も変更するだけになります。もちろん、クラスの操作に慣れている場合は、これらすべてをクラスにカプセル化する必要があります。

"""Store all variables
"""
vars = {}
"""Store the order of display
"""
order = []

"""Define a function that will store details and order of the variable definitions
"""
def makeVar(parent, order, name, value, prompt):
    parent[name] = dict(zip(('value', 'prompt'), (value, prompt)))
    order.append(name)

"""Create your variable definitions in order
"""
makeVar(vars, order, 's', 'this is a string', 'your string here')
makeVar(vars, order, 'i', 1, 'your int here')
makeVar(vars, order, 'f', 3.14, 'your float here')

"""Use a list comprehension to prepare your input
"""
my_list = [[name, vars[name]['prompt'], vars[name]['value']] for name in order]
input_panel = Input(my_list)

out_list = input_panel.results();
"""Collect your output
"""
for i in range(0, len(order)):
    vars[order[i]]['value'] = out_list[i];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top