pythonでの関数リロード(by qshpeng)

2086 ワード

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*times 2はstr 2の印刷回数だけを指定したいので、f(「3221」,「54646」,1,5)の下の呼び出し方法はf(「3221」,「54646」,5)の上の方法の方法以外は、もう1つの方法は、指定したパラメータに値を割り当てることができます.パラメータキーを使用します.上の呼び出し方法は、パラメータキーで実装されます.f(「3221」,「54646」,times 2=5)この場合、times 1のデフォルト値を書く必要はありませんが、パラメータの名前を覚えておく必要があります.そうしないと実装できません.pythonの関数のパラメータの個数は不定であってもよい.f(str,*arg)関数体という関数の2番目のパラメータがその後に複数のパラメータを持つことができることを示しているように,呼び出す場合,f(「3221」,f(「3221」,4,9634,「13241」),f(「3221」,「54646」,1,4)などの呼び出し方法はいずれも正しい.オブジェクト言語向けの関数のリロードもパラメータの個数が同じで、タイプが異なりますが、pythonを使用する限り、pythonのすべての変数がobjectタイプであることを知っていて、値を付けてからそのタイプを確定します.たとえば、str="35416546"この文は変数定義文であり、strが文字列型であることを示す値付け文でもあります.必ずタイプが明確になっているので、他のタイプの値を勝手に与えることはできません.これにより、pythonには関数パラメータ変数にタイプがなく、伝達値を呼び出すと、どのようなタイプの変数なのかがわかります.したがって、パラメータタイプの異なる関数については、リロードを考慮する必要はありません.
 
 
変換元:http://blog.csdn.net/labmpi/archive/2006/09/10/1200596.aspx