私は、最も単純なケースでは、アイテムの繰り返し可能な機能を持っています。異なるパラメータタイプを優雅に扱います
def foo(items):
for item in items:
# do stuff
時々、私は直接それを項目の反復可能を渡したいのではなく、反復可能なを取得するためのメソッドを提供するオブジェクトはありません:
def foo(obj):
for item in obj.iteritems():
# do same stuff as above
私はこのように、これらの2例をマージすることができますが:
def foo(obj):
try:
items = obj.iteritems()
except ValueError:
items = obj
for item in items:
# do stuff
これはうまくいきます。
def foo(objs):
for item in itertools.chain.from_iterable(obj.iteritems() for obj in objs):
# do same stuff again
インターフェースに互換性がないので、私はまだ、try-except
アプローチを使用することができます。今、私はこのようになります第三のユースケースを取得します。しかし、ネストされたtry catchは非常に醜いものになり始めます。さらに4番目のユースケースを追加したいときtry
ブロックをネストすることなくこれを解決する方法はありますか?
ああ、私はPythonで適切な関数のオーバーロードがあったと思います! –
@André:ほとんどの場合、Pythonでは、このような関数/メソッドのオーバーロードが必要な場合は、間違った方法で行います。 –
しかし、iterableを明示的に送信するとどうなりますか?あまりにも冗長ですか? – tokland