これは何か?
def multicall(*functions):
def call_functions(*args, **kwds):
for function in functions:
function(*args, **kwds)
return call_functions
そして、あなたは結果を集計する場合:
def multicall(*functions):
def call_functions(*args, **kwds):
return [function(*args, **kwds) for function in functions]
return call_functions
EDIT
デコレータが示唆されました。その場合には、それは次のようになります。
def appendcalls(*functions):
def decorator(decorated_function):
all_functions = [decorated_function] + list(functions)
def call_functions(*args, **kwds):
for function in all_functions:
function(*args, **kwds)
return call_functions
return decorator
LOG = logging.getLogger(__name__)
@appendcalls(LOG.info)
def info(fmt, *args):
print fmt % args
info('Hello %s', 'guido')
appendcalls()
が飾ら機能後に呼び出される関数の任意の数をとります。装飾された関数の元のもの、すべての関数の結果のリスト、またはまったく何も返さない値に応じて、デコレータを異なる方法で実装することができます。
なぜ私はこれをやっていますか?なぜなら私はコンソールに書き込む別のモジュール( 'ui.py'と呼ぶ)を書いたからです。また、ログを使って物事を記録することもできます。多くの場合、コンソールに出力するメッセージも記録されます。 –
これを行うようにロギングモジュールを設定できます。対応するレベルの複数のハンドラーやロガーを使用するだけです。 –
ロギングモジュールはテキストUI用に設計されておらず、ユーザーと対話しています。例:write_to_terminalはすでに表示されているプログレスバーとやりとりし、それを隠すことさえできます(ちょうどbzrは役に立ちます) –