C++では、シグネチャが異なる限り、同じ名前の2つの関数を作成できます。 したがって、たとえばmyfunc(int x)
はmyfunc(float x)
とは異なります。 Pythonではこれを行うことはできませんので、異なる名前の関数を定義する必要がありますか、それともこの状況を処理する良い方法がありますか?Pythonの関数シグネチャ
答えて
Pythonは、引数が整数か浮動小数点かはまったく気にしません。 は、動的にタイプされたです。たとえば、次のようにすることができます。
def SquareMe(num):
return num**2
そして、この機能を任意の番号で呼び出すことができます。
これを行うことも可能です:(!)これは、数値、文字列で動作します
def MultMe(data):
return data*2
、アレイ(!!)といくつかのクラスがメソッドを提供する場合(数で乗算することができます何もこのため)。
真実ですが、時には異なることをしたいことがあります。たとえば、floatの代わりに文字列を渡すとします。 – user
pythonでは、1つのメソッドしか作成する必要はありませんが、どの引数が渡されるかを調べることができます。また、引数が異なる場合(つまり、floatとintが異なる場合)、2つの関数。あなたは機能自体は種類やパラメータの数に基づいて異なることを行う可能性があり
def myfunc(*args):
# do something
# when you call the method
myfunc(a1, a2, k1=a3, k2=a4)
# you get:
args = (a1, a2)
kwds = {'k1':a3, 'k2':a4}
#So now lets recreate myfunc to check arguments
def myfunc(*args):
if isinstance(args[0], str): #This is where you determine argument type
# do what you want to do if argument is string
elif isinstance(args[1], int):
# do what you want to do if argument is an int
引数が型の場合、実際にはブール値を取得します(例:string)。 –
:コードでは、これは次のようになります。 Python3.4 +で
def f (a):
if type (a) == 'float' or type (a) == 'int':
...
if type (a) == 'list':
...
if type (a) == 'dict':
...
私のPython 2.7は 'type(6)'の結果として '
あなたは、一般的な関数を定義し、それに対して入力された実装を登録することができますfunctools.singledispatch
デコレータを使用することができます。
>>> from functools import singledispatch
>>> @singledispatch
... def fun(arg, verbose=False):
... if verbose:
... print("Let me just say,", end=" ")
... print(arg)
型指定された機能:docs
ジェネリック関数から
>>> @fun.register(int)
... def _(arg, verbose=False):
... if verbose:
... print("Strength in numbers, eh?", end=" ")
... print(arg)
...
>>> @fun.register(list)
... def _(arg, verbose=False):
... if verbose:
... print("Enumerate this:")
... for i, elem in enumerate(arg):
... print(i, elem)
ありパイソンの以前のリリースのためのビルトインソリューションませんが、グイド・ヴァンロッサムbloggedについてデコレータを使用してpython2のためのソリューション。 (編集:ニシキヘビ2.6 3.4機能のバックポートもある - pypiオン3.3)
編集:もちろん 、パイソンを使用することの利点の1つは、同じ符号がしばしばint値を扱うことができることであるとせずに浮いタイプ上の明示的なディスパッチは、機能が最近追加されたばかりの理由の1つです。
ありがとう、私は2.7を使用していますが、私はすぐにアップグレードされるので、これを書き留めておきます。 – user
問題ありません - Python2.6で動作するバックポートのpypiリンクを指している間に編集を追加しました。 – snakecharmerb
ForceBruは、Pythonは本当にあなたが行うので、もし、あなたがそれを自分で処理することができ、パラメータの型を気にdosen't言ったように:
def myfunc(x):
if(isinstance(x,int)):
print (x, 'int') # as myfunc(int x)
if(isinstance(x,float)):
print (x, 'float') # as myfunc(float x)
myfunc(10) # 10 int
myfunc(10.2) # 10.2 float
myfunc ("A") #
- 1. typescript関数シグネチャの競合
- 2. C関数シグネチャの問題
- 3. Idrisの 'half'関数型シグネチャ
- 4. F#タイプと関数のシグネチャ
- 5. WebSharperのJavaScript関数シグネチャ
- 6. externsルール内の複数の関数シグネチャ
- 7. Pythonでエキゾチックな関数シグネチャとは何ですか?
- 8. Pythonパッケージ関数がC++シグネチャと一致しません
- 9. iOS sortedArrayUsingFunction関数のシグネチャの混同
- 10. 検証関数のシグネチャ - タイプの別名
- 11. 関数シグネチャのPHP配列のコンマin
- 12. ラッピングLINQツーSQL関数のシグネチャ
- 13. TypeScriptの特殊な関数シグネチャ
- 14. 三項演算子と関数のシグネチャ
- 15. インターフェイスの関数シグネチャを使用するための関数パラメータ
- 16. 別の関数と異なるシグネチャを渡す関数c#
- 17. Typescript定義ファイル交差型関数シグネチャ
- 18. 関数シグネチャを取得する
- 19. S3用のPython生成シグネチャ
- 20. 可変引数数を持つ関数のTypeScript型シグネチャ
- 21. デフォルトの引数関数のシグネチャの変更
- 22. Swift:エラーを示す関数シグネチャのオプション変数。タイプが
- 23. 暗黙の引数:関数シグネチャをエンコードする方法は?
- 24. 関数のシグネチャを保持するよりもR関数のラッパー
- 25. MATLABコード生成で関数ハンドルの関数シグネチャを指定する方法は?
- 26. 可変長std ::関数を使用したC++ 11の関数シグネチャ
- 27. 他の関数からシグネチャString - > Stringを持つ関数を返します。
- 28. Spring:正しい呼び出しシグネチャを判断できません - 複数のプロシージャ/関数/シグネチャ
- 29. 仮想関数のシグネチャの不一致とその動作
- 30. 関数シグネチャ内のオブジェクトパラメータの意味は何ですか?
まあ、 'myfunc'が、それはだかどうかをX ''に同じことをしている場合'int'または' float'を使用すると、1つの関数しか必要としません。そして、その型に応じて 'x 'に異なるものをしたいのであれば、2つの異なる名前を持つ2つの異なる関数を持つ方が一般的には良いですが、argの型を決定し、をしたい。 –