2017-12-17 10 views
0

このセクションのコードを実行しているとき、私はエラーを持っている:Pythonで複雑なメソッドを呼び出すための最短かつ最善のアプローチは何ですか?

アウト
def foo(a=1, b=None, unit=1, *arg): 
    # some process  
    print(a + min(arg)) 

foo(arg=3,4) 

[0]:にSyntaxError:非キーワード引数キーワード引数の後に

を(.fooというを呼び出すための最良の方法は何ですか)方法?
に「a」値を静的に追加して、いくつかの数値の最小値を求めます。

注:.foo()と入力します。には静的な入力変数があります。
注::印刷は「4」です。

は、私たちは.fooという定義はないことができることを知っている()など怒鳴るなど方法:

def foo(*arg, a=1, b=None, unit=1): 
    pass 

そして、私は静的.fooというの任意の値を割り当てたくない()変数(a、b、unit)

+1

に共同関数を定義しかしarg'がパラメータではありません 'ので、'引数= 3 'のは、意味がありません。さらに、名前のない引数をデフォルト値のパラメータの後に定義することはできません。トラブルを引き起こすのはここだけでなく、関数の定義でもあります。 –

+0

foo(arg =(3,4)) –

+0

@JacquesdeHoogeこれは動作しません –

答えて

0

def foo(a=1, b=None, unit=1, *arg): 
    # some process  
    print(a + min(arg)) 

def co_foo(*arg): # co function 
    foo(1, None, 1, *arg) 

co_foo(5,3,4) # expected print(1+3) 

OUT [0]:4

または:

def foo(a=1, b=None, unit=1, *arg): 
    # some process  
    print(a + min(arg)) 

def co_foo(*arg): # co function 
    foo(1, None, 1, *arg) 

arg = [5, 3, 4] 
co_foo(arg) # expected print(1+3) 

アウト[1]:このアプローチでは4

を私たちは、単純な呼び出し.fooという()

+0

fooとそのparamリストを与えられたものに近づけることができます。 –

-1

* argは、メソッドが位置の値に基づいて可変長の引数を取ることを意味します。

以下の例は、コンセプトに灯している可能性があります。 お手伝い願います!

Iは .fooという().fooという()変数を静的に値を代入する必要がないメソッドを呼び出すへの明示的な最短のアプローチは、次のコードのようなものであると思う
>>> def foo(a=1, b=None, unit=1, *arg): 
...  print(arg) 
...  print(a+min(arg)) 
... 
>>> foo(*[1,2,3,5,6,7]) 
(5, 6, 7) 
6 
+0

ありがとう、しかし私は静的なfoo入力変数を変更したくありません。 –

+1

これはCまたはC++ *ではありません。だから、リファレンスと入力ヴァースの変更による呼び出しとは関係ありません。 Keerthanaの例1はaに割り当てられ、2はbに割り当てられ、3はユニットに割り当てられ、[5,6,7]はargに割り当てられます(ほとんどのPython開発者がargsと呼ぶ)。 *呼び出し時にシーケンスを別々のパラメータに展開し、定義時にシーケンスを1つのパラメータにパックします。 –

+0

@JacquesdeHooge私はpythonの開始(pack/unpack)とC++のstar(pointer)について知っていますが、あなたのアプローチでは、aとbとunitに値を代入しますが、単位は静的である。私は* argにいくらかの値を割り当てるだけです。 –

関連する問題