関数に渡される実際のパラメーターの数を取得する方法はありますか
def foo(a, optional=42):
if ????
print "1 arg"
else:
print "2 args"
foo(11) # should print 1 arg
foo(22, 42) # should print 2 args
署名を変更せずに受け入れ*args
ますか?
これを行うには、デコレータを使用できます。装飾された関数の署名を保持するという質問から、これを正しく行う方法がわかりました。
import decorator
@decorator.decorator
def count_args(f):
def new(*args, **kwargs):
kwargs['nargs'] = len(args)+len(kwargs)
return f(*args, **kwargs)
return new
@count_args
def foo(a, optional=42, nargs=1):
print nargs
foo(1) # 1
foo(1, 4) # 2
foo(1, optional=4) # 2
アップデート:
関数に渡した引数の数のキーワード引数を追加しました。ご覧のとおり、デフォルトでは 1 で、これは True です。これはハックのように見えますが、機能します。