pythonでの関数の再ロード

2012 ワード

C++、JAVA、または他のオブジェクト向け言語に慣れている場合は、関数のリロードをよく使用します.
関数のリロードとは、複数の関数の名前と戻り値のタイプが同じで、パラメータタイプやパラメータの個数だけが異なることを意味します.関数の再ロードは、コードの再利用率とプログラマの開発効率を大幅に向上させます.しかし、pythonの使用に移行すると、関数のリロードをサポートしない形式に慣れない可能性があります.しかしpythonはオブジェクト向け言語として,このオブジェクト向け言語に共通する重要な特性を関数的に再ロードすることは自然に失われない.
pythonで関数の再ロードを実現する方法は非常に特別で興味深い.まず、次の関数定義を見てみましょう.def(str,times):print str*times上の関数は文字列strに対してtimes回を印刷することを指します.strに対して印刷するだけで、毎回timesに1を割り当てるのは煩雑です.timesの値を指定しないで1回だけ印刷したいと思っています.C++では、void f(string str){cout << str << endl;}void f(string str,int times){int i=0;for(i=0;icout << str<< endl;}を1回印刷するとf(str)が呼び出され、複数回印刷するとf(str,times)が呼び出され、pythonで実現されます:f(str,times=1)print str*timesを1回印刷するとf(str)、複数回印刷するとf(str,times)が呼び出されます.呼び出し方法は同じです.形式的にはC++に比べてコードが大幅に節約されたが,機能は同じである.times=1パラメータが指定されていない場合、デフォルト値は1
デフォルト値はpythonが関数の再ロードを実現するために使用する重要な方法です.1つの関数にデフォルト値パラメータと他のパラメータがある場合は、デフォルト値のあるパラメータをパラメータリストの後部に配置する必要があります.1つの関数に複数のパラメータがある場合は、呼び出し時にそのうちのいくつかを指定します.これには、パラメータの順序で値を割り当てる必要があります.値を指定したいパラメータの他のパラメータにデフォルト値がある場合は、デフォルト値も記入する必要があります.例えば、f(str 1,str 2,times 1=1,times 2=1)print str 1*times 1 print str 2*times 2 str 2の印刷回数のみを指定したい場合は、f(「3221」、「54646」、1,5)を呼び出す必要があります.   次の呼び出し方法はf("3221","54646",5)上記の方法のほかに、指定したパラメータに値を割り当てる方法があります.パラメータキーワードを利用します.上記の呼び出し方法はパラメータキーワードで実現します.f("3221","54646",times 2=5)この場合、times 1のデフォルト値を書く必要はありませんが、この場合はあなたのパラメータの名前を覚えておく必要があります.そうでなければ実現できません.pythonの関数のパラメータの個数は不定であってもよい.f(str,*arg)関数体という関数の2番目のパラメータが後に複数のパラメータがあることを示すように,呼び出し時にf(「3221」,4),f(「3221」,4,9634,"13241"),f(「3221」,「54646」,1,4)などの呼び出し方法が正しい.
オブジェクト言語向けの関数のリロードもパラメータの個数が同じで、タイプが異なります.pythonを使用する限り、pythonのすべての変数がobjectタイプであることを知っています.値を付与した後でのみ、そのタイプを決定します.たとえば、str="35416546"この文は変数定義文であり、値を付与文でもあり、strが文字列型であることを示します.必ずタイプが明確になっているので、他のタイプの値を勝手に与えることはできません.これにより、pythonには関数パラメータ変数にタイプがなく、伝達値を呼び出すと、どのようなタイプの変数なのかがわかります.したがって、パラメータタイプの異なる関数については、リロードを考慮する必要はありません.