これは、デコレーターにとって良い仕事のように見えます。これはどう:
def sanitized(func):
def sfunc(*args, **kwds):
return func(*[arg or '' for arg in args],
**dict((k, v or '') for k,v in kwds.iteritems()))
sfunc.func_name = func.func_name
sfunc.func_doc = func.func_doc
return sfunc
これを関数で次のように使用します。
@sanitized
def func(param1, param2, param3):
print param1, param2, param3
次に、パラメーターが false の場合、パラメーターは空の文字列に置き換えられます。
>>> func('foo', None, 'spam')
foo spam
(Ned Batchelderが彼の回答で指摘しているように、これでも関数シグネチャが台無しになることに注意してください。修正するには、Michele Simionatoのdecoratorモジュール@decorator
を使用できます-の定義の前にa を追加するだけでよいと思いますsanitized
)