Pythonの教科書P131で、Pythonでは全てがオブジェクト。関数も変数に代入できるとあります。つまりfuncにはTasizan、Hikizanを代入できる。ということです。ちょっと驚きなのが、変数が文字列だったらどうなる?ですよね。Tasizanの場合は、文字列の連結で対処してくれました。Hikizanはどうなの?と思いたくなります。例えば”ABCDEF"から”CD"を取ったら、”ABEF"となります。
単純に整数の引き算、100 - 50 の様には行きません。Hikizanそのものが使えません。C言語とかなら、多様性があったはずで、引数があっている関数を選んでくれたと思いますが、駄目だったと思います。関数の名前をMojiHikizanとして、よく知らない正規表現のreをimportしました。Tasizanの場合は、引数が整数でも小数点が付いていても、良いようです。
例を少し変えてみました。最後に文字列を一つにする方法ですが、もっとらしく書ける方法がありそうに思うんですが…。
文字列を一つにする部分を追加してみました。後のほうが変数を使わない分、スッキリですね。と思います。
def MojiHikizan(a, b):
return ''.join(a.split(b))
でしょうね。
def Hikizan(a, b):
if isinstance(a, str) and isinstance(b, str):
return ''.join(b.split(a))
else:
return a - b
と書けば良く、「多様性」とか関係ないですね。
引数の型判定で処理を振り分ければ良く、こういう型判定に従って処理を変える関数を通称「ディスパッチ関数」と呼びます。
ちなみに、実際は、Cの方がPythonより融通は利きません。