2017-03-09 17 views
0

私はすべての引数がデフォルト値を持つ関数を定義したいと想像関数の内部渡された引数の数を見つける:パイソン -

def fun(a=2, b=1): 
    ... 

関数の内部ロジックは、ということです。何も渡されない場合、デフォルトを使用値; aだけが渡された場合、bは常にa/2に等しくなります。 aとbの両方が渡された場合は、渡された値を使用します。

この機能を完了する問題は、違いを見分けることは困難と思われるということである(例えば)楽しい(4)楽しい私にはわからないので、(4,1)B = 1は外部に提供されるか、デフォルト値に過ぎません。

私の場合、* argsを使用するのは明らかですが、私はデフォルトの値と名前を保持したいと思います。したがって、内部を知ることが唯一の方法だと思われます。fun()呼び出されたときにいくつの引数が渡されますか。私は使用するシステム機能があるかもしれないと思うが、私はそれらを見つけることに成功しなかった。どのように考えれば、この作品はどのように役立つでしょうか。

ありがとうございます! :)

+5

をので、デフォルトの引数 'B = 1 'を持っていません。 (例えば) 'b = None'を持って、あなたの関数の中で、' b'が状況に基づいて取るべき値を決める。 – khelwood

答えて

2

たとえば、bのデフォルト値をNoneとすることができます。次に、bの値の範囲内で機能を調整してください。

def fun(a=2, b=None): 
    if b is None: 
     b = a/2 
    ... 

これはあなたを与える:

f() : a=2, b=1 
f(4) : a=4, b=2 
f(4,1) : a=4, b=1 
+0

ありがとう@khelwood!それは非常に明確で素晴らしいソリューションです。好奇心のために、Pythonでは関数内で引き渡される引数の数を知ることは可能だと思いますか? – zhxywzy

+0

関数に入る前に引数をトラップするために何らかの種類のデコレータを使うことができますが、基本的には '* args、** kwargs'解決策になると思います。 – khelwood

+0

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