pythonでパラメータを定義する4つの方法
7990 ワード
pythonでの関数パラメータの定義には、主に4つの方法があります. F(arg1,arg2,...)
これは最も一般的な定義方法であり、1つの関数は任意のパラメータを定義することができ、各パラメータ間をカンマで分割することができる.このように定義された関数は、呼び出されるときも関数名の後の括弧に等数の値(実際のパラメータ)を提供しなければならず、順序が同じでなければならない.つまり、このような呼び出し方法では、パラメータと実パラメータの個数が一致しなければならない.そして,一つ一つ対応しなければならない,すなわち,最初の形参はこの最初の実参に対応する.例:
この関数を呼び出すと,a(1,2)はxが1,yが2をとり,パラメータは実パラメータに対応し,a(1)またはa(1,2,3)はエラーを報告する.
2.F(arg1,arg2=value2,...)
この方法は、デフォルト値を提供する最初の改良版です.
この関数を呼び出すと,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に格納されることに注意してください.
(1,)#はメタグループに格納されます
4.F(**arg1)
パラメータ名に2つの*を付けると、パラメータは関数内部に識別子という形式のdictionaryに格納され、このとき関数を呼び出す方法はarg 1=value 1、arg 2=value 2のような形式を採用する必要がある.
これは最も一般的な定義方法であり、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)