pythonでパラメータを定義する4つの方法

7990 ワード

pythonでの関数パラメータの定義には、主に4つの方法があります.
  • F(arg1,arg2,...)

  • これは最も一般的な定義方法であり、1つの関数は任意のパラメータを定義することができ、各パラメータ間をカンマで分割することができる.このように定義された関数は、呼び出されるときも関数名の後の括弧に等数の値(実際のパラメータ)を提供しなければならず、順序が同じでなければならない.つまり、このような呼び出し方法では、パラメータと実パラメータの個数が一致しなければならない.そして,一つ一つ対応しなければならない,すなわち,最初の形参はこの最初の実参に対応する.例:
    def a(x,y): print x,y 

    この関数を呼び出すと,a(1,2)はxが1,yが2をとり,パラメータは実パラメータに対応し,a(1)またはa(1,2,3)はエラーを報告する.
    2.F(arg1,arg2=value2,...)
    この方法は、デフォルト値を提供する最初の改良版です.
    def a(x,y=3):   print x,y 

    この関数を呼び出すと,a(1,2)は同様にxが1,yが2をとるが,a(1)であれば誤りは報告されず,このときxが1,yはデフォルトの3となる.上記の2つの方式は、パラメータ位置を交換することもでき、例えばa(y=8,x=3)はこのような形式でもよい.
    3.F(*arg1)
    上の2つの方法は、いくつのパラメータがあるか、いくつの実パラメータが入っているか分からない場合がありますが、この場合、3つ目の方法が役立ちます.この関数の実パラメータの数が不定であることを*にパラメータ名を付ける方法で表し、0であるかnである可能性があります.いくつかにかかわらず、関数の内部には、パラメータ名を識別子とするtupleに格納されることに注意してください.
    >>> def a(*x): if len(x)==0: print 'None' else: print x >>> a(1) 

    (1,)#はメタグループに格納されます
    >>> a() None >>> a(1,2,3) (1, 2, 3) >>> a(m=1,y=2,z=3) Traceback (most recent call last): File "<pyshell#16>", line 1, in -toplevel- a(m=1,y=2,z=3) TypeError: a() got an unexpected keyword argument 'm' 

    4.F(**arg1)
    パラメータ名に2つの*を付けると、パラメータは関数内部に識別子という形式のdictionaryに格納され、このとき関数を呼び出す方法はarg 1=value 1、arg 2=value 2のような形式を採用する必要がある.
    >>> def a(**x): if len(x)==0: print 'None' else: print x >>> a() None >>> a(x=1,y=2) {'y': 2, 'x': 1} #        >>> a(1,2) #         Traceback (most recent call last): File "<pyshell#25>", line 1, in -toplevel- a(1,2) TypeError: a() takes exactly 0 arguments (2 given)