2016-05-16 14 views
0

現在、Pythonは私はそれがプログラマのエラーを削減すると思うので、私はPythonで "def"関数をオーバーロードして、型付き引数を受け入れる方法はありますか?

def f(x: int, A: list): 

のような関数を定義できるようにしたいと思い

def f(x, A): 

のような関数を定義することができます。

どうすればいいですか?

今私は

def f(x, A): 
    assert type(x) == int and type(A) == list, "Invalid parameters to function f" 

に頼ることですが、私は、私はちょうどdef関数のシグネチャを変更することができれば、それが簡単かもしれないと思います。

+2

[この質問(「厳密に型指定されていますか?」)](http://stackoverflow.com/questions/11328920/is-python-strongly-typed)、[この1つ( "Function parameters types in Python")](http://stackoverflow.com/questions/2489669/function-parameter-types-in-python)も参照してください。 –

+1

アサーションをオフにすることができます。あなたはプログラムフローのためにそれらに頼るべきではありません。また、Pythonには[タイプヒント](https://docs.python.org/3/library/typing.html)の機能が含まれていますが、静的な型指定や関数のオーバーロードはPythonツールよりもJavaツールです。 – TigerhawkT3

+1

'def'は関数ではありません。署名はありません。あなたは 'return'や' while'を変更することができます。 – user2357112

答えて

1

defを変更することは可能ですが、右(最も簡単な)アプローチではありません。

最も簡単な方法は、Python 3を使用することです。これは、型の注釈をサポートしますが、デフォルトでは何もしません。

This answerは、python 3の注釈とデコレータと型フィルタリングヘルパ関数を組み合わせています。デコレータベースのソリューションとタイプチェックのレシピがたくさんあります。他の例が必要な場合は、 "python annotation type checking"を検索してください。

上記の質問には、何らかの理由でpython 3を使用できない場合、python 2のデコレータの回答も含まれています。

関連する問題