2016-04-06 11 views
3

ための引数とデフォルトkwargsからと機能:Pythonの3.4で正常に動作します私のような方法でPythonのクラスを持っているのPython 2.xおよび3.x

class Table(object): 
    def create_index(self, *fields, name=None): 
     ... 

が、Pythonの2.7でSyntaxErrorをスローしますので、 argsとデフォルトのkwargの順番。私はそれを変更した場合:

this postあたり
def create_index(self, name=None, *fields): 
    ... 

それは、Python 2.7で動作し、Python 3.4でエラーになりません、しかし、fieldsは、常に関係なく、私が渡すものを空のタプルになっていなけれ終わる私が呼び出しています。それが好き:

table.create_index('address')

両方のバージョンと互換性のある引数とデフォルトkwargsからで関数を定義するためのいくつかの方法がありますか?

+0

他の方法を呼び出す方法はありますか? – wim

+0

@wim、おそらく、どのような可能性がありますか? – Rob

+0

@Signal構文エラー以外は試してみることはできません! – wim

答えて

3

悲しいことに、Python 2では、オプションの名前付き引数を省略して、*argsを設定することはできません。あなたが使っている機能はPython 3で追加されました。それは名前でnameを提供するために、あなたを強制的に、しかし、あなたのオリジナルのpython 3インタフェースはすでに、とにかくそれを必要としているようだ

def create_index(self, *fields, **kwargs): 
    name = kwargs.pop('name', None) 

これは私が考えることができる最善の回避策です。

関連する問題