2011-07-25 16 views
0

にパターンが一致した項目に名前を割り当てる:は、私は次のことをやろうとしているのPython

def f(a=(b,c,d)): 
    pass 

しかし、インタプリタは、私がこれを行うとき、Bが定義されていないと文句を言い。意図した結果を得るための「Pythonic」方法はありますか?私は、次のような何かができることを知っている:

def f((b,c,d)): 
    a = (b,c,d) 
    pass 

しかし、私はむしろ、私を必要としませんでした解決策は自分自身を繰り返すように思います。何か案は?明確ため

編集:私は何をしようとしていますが、以下のように呼び出すことができる機能を持っている。そして、

f((1,2,3)) 

を、関数の本体の中に、次の名前が割り当てられています。

a = (1,2,3) 
b = 1 
c = 2 
d = 3 
+0

"意図した結果を得るための 'Pythonic'な方法はありますか?それは意図した結果が何であるかに依存します。あなたはあなたの質問にその情報を追加することを検討するかもしれません。 'a =(b、c、d)'の関数シグニチャの中で、 'a'のデフォルト値を設定する以外に、何を期待しますか? – kindall

答えて

4

あなたが望むものを正確に行う方法はありません。また、正式な関数の引数に開梱タプルは、それが新たな引数名2to3はのスタイルだ

def f((a,b,c)): 
    ... 

def f(a_b_c): 
    a,b,c = a_b_c 
    ... 

に変更するのpython提案交換がある3にドードーの道を行きます。

:;変換スクリプトを生成する、明らかにあなたがしたい名前のどんな並べ替えを使用することができます)

をお使いの場合には、最も簡単な方法は、このことだろう

最小限の繰り返しがあります。

+0

't'や' tuple_of_'のように、変数に何かを含めるような名前を付けるのが少し良いです。 – Keith

+0

タプルである必要はありません。任意のシーケンスが行います。固定数の変数にアンパックする場合、量を示すことは不可欠であると私は考えるので、 "タプル"はしばしば十分に具体的ではありません。 'a_b_c'のようなものは暗黙的にこれを行います(そして必要な順序を指定します)。 – kindall

+0

それ以外の場合は 'def f(a、b、c):abc = a、b、c ...'となります。 –

0

関数がタプルを受け入れる代わりに、呼び出し元がタプルを展開しないのはなぜですか?

>>> def f(a, b, c): 
     print a, b, c 

>>> t = (1, 2, 3) 
>>> f(*t) 
1 2 3 

それ以外の場合は、NamedTupleクラスを考慮してください。

関連する問題