2016-12-26 16 views
-2

Pythonでは、2つの異なるバージョンの引数を取る組み込み関数があります。例えば、同じ関数、2種類のパラメータ

str(object='') -> str 

OR

str(bytes_or_buffer[, encoding[, errors]]) -> str 

は、コードの正常な部分でこれを行う方法はありますか?たぶん何かのようなもの

def func(arg_option_1): 
    # do something 

def func(arg_option_2): 
    # do something else 
+3

はい... [チュートリアル](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)のいずれかを読んだことがありますか?これはかなり可変長の引数を持つ方法とデフォルトの引数を持つ方法を説明しています... – mgilson

+0

実際には、 'func'を使ったあなたの例は、' str'の例のように何もありません。あなたの場合の最も簡単なオプションは関数内に 'if'ステートメントを置くことです。 –

+0

Pythonはそのような多態性をサポートしていません。 'func'の2番目のバージョンは単に最初のバージョンを置き換えます。あなたは確かに 'str'のように*オプションの引数を持つことができます。また、渡されるオブジェクトの種類(正確に何をしているかによって決まる)に応じて異なることを行うことができます。 – jonrsharpe

答えて

3

Pythonでは、1つの名前は1つのことを意味します。これは、あるオブジェクトに対する単一の参照です。だから、同じ名前の2つの異なるものを定義することはできません。

しかし、同じ機能では、可変位置引数と可変キーワード引数を取り、関数内でそれを検証することで、2つの異なることを達成できます。

あなたは別のStackOverflowのポストに答えの例を参照することができます:https://stackoverflow.com/a/5079766/3883609

をそれとも、関数が取る引数の二つの異なるタイプを事前に知っていれば、あなたが検証し、それに応じて異なるパスを取ることでisinstance()を使用することができます。

>>> isinstance(10,int) 
True 
>>> isinstance('hi',str) 
True 
>>> isinstance(10,str) 
False 
関連する問題