2017-11-24 9 views
-1

*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回、書くことができますか?

+0

あなたは確かに関数を2回書くことができますが、2番目のバージョンがPython 2とPython 3の両方で動作するのであれば、なぜでしょうか?あなたの目標が明確であれば、2つのバージョンを用意することによって、機能をより不明瞭にするでしょう。あなたの関数にコメントを付けるだけで、より明確で簡単になります。 – khelwood

答えて

0

いいえいいえPython 2インタープリタで使用されるファイルでPython 3フォームを使用する機能はありません。これは、*argsの後に置かれたキーワードのみの引数がPython構文に変更されているためです。コードを実行する前にPython 2で構文エラーが発生するためです。

どちらの場合でもPython 2バージョンを使用するか、別々のソースファイルを使用して正しいものだけをインポートする必要があります。

関連する問題