2017-09-14 6 views
1

これは幾分奇妙な要求かもしれませんが、デフォルトのパラメータを持つ各タプルはPython 3で任意の量のタプルを受け入れるメソッドを用意したいと思います。デフォルトのパラメータで複数のタプルを渡す

これは、グループのスクリプト機能を記述しているため、ユーザーにわかりやすい呼び出し可能メソッドが必要なためです。ユーザーは、2Dプロットメソッドをコールしたい場合たとえば、私は、メソッドの引数は、次のようになりたい:

plot2D(('sweepvar1', start1, stop1, npts1=None, step1=None), 
     ('sweepvar2', start2, stop2, npts2=None, step2=None)) 

したがって、ユーザーは基本的に困難が来ている。この

plot2D(('var1', 0.0, 1.0, npts1=101), ('var2', 0.5, 0.6, step2=0.001)) 

のようなものを呼び出しますユーザーが測定のポイントまたはステップサイズの数を指定したい場合、私はアプリオリを知らないので、両方のオプションを含める必要があります。理想的には、ユーザーに両方を指定させたり、nptsstepの間で選択するためのフラグである新しい変数を作成することを避けたいと考えています。

default parameters,*argsおよび**kwargsに多少慣れていますが、上記の問題を解決するには至りません。

ありがとうございました!達成することは困難と思われる

+1

これらはタプルではありません。これらには名前付きパラメータが含まれているためです。 –

+0

はnamedtuplesのようになります。 –

+0

おそらく、タプルではなくカスタムオブジェクトを使用して、ユーザがすべてを適切に初期化できるようにする必要があります。 –

答えて

2

は、として-ですが、あなたは、引数をラップし、各タプルのための位置&キーワード引数のタプルを作成するヘルパー関数を作成することができ

(('var1', 0.0, 1.0), {'npts1': 101}) (('var2', 0.5, 0.6), {'step2': 0.001}) 

今面倒な作業がplot2Dでこれらの引数を処理することですが、少なくとも、ユーザーが明確なインターフェイスを持っている:mkarg(引数を作る)

def mka(*args,**kwargs): 
    return (args,kwargs) 

def plot2D(t1,t2): 
    print(t1,t2) 

plot2D(mka('var1', 0.0, 1.0, npts1=101), mka('var2', 0.5, 0.6, step2=0.001)) 

このテストが返すことを呼び出します。

オルタナティブ:

あなた本当にはタプルをしたい場合は十分な長さでない場合、あなたはあなたのタプルパラメータのlenをチェックし、Noneとの完全な可能性があります。第2の「オプション」値が第1の値よりも少なく使用されている場合は、これが有効です。少量の「オプションの」値に対しては実用的です。

def plot2D(tuple1,tuple2): 
    tuple1 += (None,)*(5-len(tuple1)) 
    tuple2 += (None,)*(5-len(tuple2)) 

plot2D(('var1', 0.0, 1.0, 101), ('var2', 0.5, 0.6, None, 0.001)) 
+0

ああ素敵な私は本当に代わりが好きです!私はそれを考慮しませんでした狂ったように。私は、ユーザーに 'None'を指定させてもそれほどオーバーヘッドが発生しないようにして、うまくいくと思うと思う。 – spaderdabomb

+0

楽しい部分:これは私の最初の答えでしたが、私はそれを削除しました(私はキーワードによる受け渡しがより重要であると思ったからです) –

関連する問題