2017-06-13 2 views
-3

引数が関数に渡される順序を切り替える標準的な方法はありますか?関数内の2つの引数の順序を切り替える

def verse_maker(sent1, sent2): 
    do stuff 

verse_maker(arg1, arg2) 

スイッチなどの引数の位置もの:

verse_maker(arg2, arg1) 

編集:私は手動で再び関数を呼び出すことなく、言うことを意味します。これらの2つの異なる構成では、関数を引数で2回実行したいと思います。

+2

はい。関数内の引数の順序を入れ替えます。私はここに何かを逃していますか – scotty3785

+0

ここで書いたより簡単な方法はないと思うのですか?あなたのプログラムは正しく動作するとは思っていませんでした。何を達成しようとしていますか? – Sayse

+0

いいえ、スワップされた注文で関数を2回呼び出す標準的な方法はありません。 –

答えて

3

あなたが行うことができるはず:

def verse_maker(sent1, sent2): 
    do stuff 

verse_maker(sent2=arg2, sent1=arg1) 

をしかし、あなたは、単に周りの引数を交換していない理由を私は見ていませんか?そのはるかに短い

編集:あなたの意見を正確には分かりません。コードを2回呼び出さずに2回実行したいですか?私は2回実行し、最初のループの最後に引数をスワップするようにコード内にループを入れることができると思いますか?

編集2:だからここに私はあなたが

def verse_maker(sent1, sent2): 
    for i in range(2): 
    do stuff 
    sent2, sent1 = sent1, sent2 

を探しています。これは、ループの最後で変数を交換し、私としてスワップ変数

+0

小さな質問が1つあります。なぜ呼び出された関数の代わりに呼び出し関数にループを置かないのでしょうか。そうすることで、呼び出された関数は副作用のないままです。 – SRC

+0

OPの中に置いたのは、OPが他のポイントでその関数を呼びたいと思っていて、そのたびに引数の両方のオーダーで関数を実行するように思えるからです。もちろん、これは一度だけやりたければ、関数呼び出しの周りにforループを置くことになります。しかしOPは彼らが関数を何度も呼びたくないと言ったので、私はループの中で関数の中に入った。 – dhdavvie

+1

それは正確に私の指摘だった。ループを呼び出された関数から取り出し、それを呼び出し関数に置くと、関数を1回か2回呼び出すかどうかは関係ありません。私たちが望むことは何でもできますが、その機能は '原子単位(atomic unit) 'として常に期待どおりに機能します。どう思いますか? – SRC

1

でコードを再実行信じるものですコメントに記載されているIMHOのソリューションは機能しますが、関数自体の内部にループを配置するという副作用があります。私はちょうど機能のうち、ループを取り、我々はそれを呼び出しているところに置い代わり

def verse_maker(sent1, sent2): 
    do stuff 

for i in range(0,2): 
    verse_maker(arg1, arg2) 
    arg1, arg2 = arg2, arg1 

これを提案したいです。そうすれば、この関数を何回呼び出すかは関係ありません。常に望ましい結果が得られます。

関連する問題