2016-09-26 8 views
2

私は4つの引数を持つ関数を持っており、それらの4つの引数を何かのためにチェックしたいと思います。 現在、私はこのようにそれを行う:すべての関数argmumentsにアクセスする

def function1(arg1, arg2, arg3, arg4): 
    arg1 = function2(arg1) 
    arg2 = function2(arg2) 
    arg3 = function2(arg3) 
    arg4 = function2(arg4) 

def function2(arg): 
    arg = dosomething(arg) 
    return arg 

私はこれは実際にそれを行うには良い方法はないと思うので、私の考えでは、このような何かを行うことです。

def function1(arg1, arg2, arg3, arg4): 
    for arg in listOfArguments: 
     arg = function2(arg) 


def function2(arg): 
    arg = checkSomething(arg) 
    return arg 

が方法ではありPythonは function1に渡されたすべての引数のリストを取得しますか?

ご協力いただきありがとうございます。

+1

あります:任意の引数リストのための '* args' –

答えて

6

を見つけることができますタプルリテラルの引数名:

for arg in (arg1, arg2, arg3, arg4): 
    # do stuff 

あなたはより多くの引数で呼び出されている可能なあなたの関数を気にしない場合は、単に*args syntaxを使用します。その後、機能が巡回できないタプルとして呼び出されたときの引数を公開

def function1(*args): 
    for arg in args: 
     arg = function2(arg) 

すべての呼び出しで結果を保存する必要がある場合は、list comprehensionfor-loopを変更して、返された値のリストを作成する方が良いです。たとえば、値をとり、単にそれに2を追加する機能を持た:

def add2(arg): 
    return arg + 2 

def function1(arg1, arg2, arg3, arg4): 
    a1, a2, a3, a4 = [add2(arg) for arg in (arg1, arg2, arg3, arg4)] 
    print(a1, a2, a3, a4) 

私たちは、その後、すべてのargを取り、add2に供給するし、リスト内のエントリとしてそれを保存するリストの内包を作成a1,..,aNに解凍します。関数呼び出しの値が今の結果が含まれています。前の例で

function1(1, 2, 3, 4) 
3, 4, 5, 6 

(arg1, arg2, arg3, arg4)関数を定義するときに*args構文を使用する場合は、必ずargsに置き換えることができ、結果は同様であろう。補遺として


、あなたはより多くの関数型プログラミングのファンなら、あなたは常にmap関数の引数は、とは:-)の数文字を救うことができます。

def function1(*args): 
    a1, a2, a3, a4 = map(add2, args) 
    print(a1, a2, a3, a4) 

同じ結果:私はfunction1*args定義この時間を追加します。

+0

あなたの迅速な対応に感謝します。arg = function2(arg)はargの新しい値を作成していますが、forループの終了後にこの値が失われるという問題があります。どのように私のargsにargの新しい値を渡すために私はforループが完了した後にそれらと一緒に作業することができますか? – JBecker

+1

私は答えを編集しました。返された値を格納する必要がある場合は、 'for'ループの代わりにリストの補完を使うことができます。次に、結果リストを作業可能な変数、つまり 'a1、a2、a3、a4 = r'に展開します –

3

はい、*argsを使用する:あなたはセット例えばちょうどそれらのうちのiterableを作成引数の数、ラップを持っているので

In [1]: def func(*args): 
    ...:  print(len(args), args) 
    ...:  

In [2]: func(1, 2, 3, 4) 
4 (1, 2, 3, 4) 

詳しい情報はhere.

+1

印刷はpy3の関数です – Sevanteri

+0

@セヴァンテリ:固定 – sokoli

関連する問題