*args
の後にデフォルトのパラメータを呼び出すためのPython 3構文を維持する方法はありますか?* argsの後にデフォルトの引数を設定するPython 2/3互換の方法
そうように私は機能を持っている:
def foo(*args, bar='test'):
pass # do stuff with args and bar
問題は、モジュールは、Python 2と3の両方に対応する必要があり、そのため*args
後のデフォルトの引数は動作しませんです。私は動作しますが、紛れもなくあまり明確で最初の方法よりも
def foo(*args, **kwargs):
bar = kwargs.pop('bar', 'test')
# do stuff with args and bar
を行うことをお勧めされ、this answerを見てきました。最初の方法に関する素晴らしい点は、部分的に自己文書化しているのに対して、2番目の方法では、ユーザーは何が起こっているのかを少し調べる必要があるということです。そして可読数はです。
これで、Python 2.7でコードを実行している最中に、少なくともモジュールの最初のメソッドを使用できる方法がありますか?たとえば、関数定義をPy2のために1回、Py3のために1回、書くことができますか?
あなたは確かに関数を2回書くことができますが、2番目のバージョンがPython 2とPython 3の両方で動作するのであれば、なぜでしょうか?あなたの目標が明確であれば、2つのバージョンを用意することによって、機能をより不明瞭にするでしょう。あなたの関数にコメントを付けるだけで、より明確で簡単になります。 – khelwood