Pythonでの関数のパラメータ

3502 ワード

Python関数のパラメータ
Python関数の定義は非常に簡単で,柔軟性が非常に大きい.通常定義されている必須パラメータに加えて、デフォルトパラメータ、可変パラメータ、キーワードパラメータを使用して、関数で定義されたインタフェースを使用して、複雑なパラメータを処理するだけでなく、呼び出し者のコードを簡略化することができます.
  • 位置パラメータ
  • まずX 2を計算する関数をください.
    def power(x):
        return x * x
    

    Power(x)関数の場合、パラメータxは位置パラメータです.Power関数を呼び出す場合は、1つのパラメータxのみを入力する必要があります.
    >>> power(5)
    25
    >>> 
    225
    

    今、もし私たちがX 3を計算したらどうしますか?Power 3関数をもう1つ定義できますが、X 4、X 5を計算する場合は...どうしよう?無限の複数の関数を定義することはできません.では、Xnを計算するためのPower(x,n)を定義します.
    def power(x,n)
        s = 1
        while n >0:
            n = n - 1    
            s = s * x   
        return s
    

    修正したパワー(x,n)関数については,Xの任意のn次方程式を計算できる.
    >>> power(5,2)
    25
    >>> power(5,3)
    125
    

    修正されたpower(x,n)関数には、xとnの2つのパラメータがあります.この2つのパラメータは位置パラメータであり、関数を呼び出すと、入力された2つの値は位置順にパラメータxとnに順次割り当てられます.
  • デフォルトパラメータ
  • 新しいpower(x,n)関数の定義に問題はありませんが、古い呼び出しコードが失敗しました.なぜなら、パラメータを追加したため、古いコードがパラメータが不足して正常に呼び出せないためです.
    power(5)
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: power() missing 1 required positional argument: 'n'
    

    OK、powerプロンプトを呼び出す位置パラメータ「n」が1つ欠けている.このときデフォルトパラメータが役に立ちます.X 2はよく計算されるので、2番目のパラメータnのデフォルト値を2に設定することができます.
    def power(x,n=2):
        s = 1
        while n > 0 :
            n -=1
            s *= x
        return s
    

    これにより、Power(5)を呼び出すと、Power(5,2)を呼び出すことになります.
    >>> power(5)
    25
    >>> power(5,2)
    25
    

    n>2の場合、power(5,3)などのnを入力する必要があります.上記の例から、デフォルトパラメータは関数の使用を簡略化できることがわかります.デフォルトのパラメータを設定する際には、次の点に注意してください.
  • 必須パラメータは前、デフォルトパラメータは後です.
  • デフォルトパラメータの設定方法.関数に複数のパラメータがある場合は、変化の大きいパラメータを前に、変化の小さいパラメータを後ろに置きます.変化の小さいパラメータは、デフォルトのパラメータ
  • として使用することができる.
  • デフォルトパラメータを使用するとどのようなメリットがありますか?最大の利点は、関数呼び出しの難易度を低減することです.
  • は、デフォルトのパラメータが不変のオブジェクトを指す必要があることを定義します.デフォルトのパラメータは良いですが、ピットもあります.最大のピットを示します.
  • def add_end(L=[]):
        L.append('END')
        return L
    add_end(['x','y','z'])
    ['x', 'y', 'z', 'END']
    add_end([1,2,3])
    [1, 2, 3, 'END']
    add_end()
    ['END']
    add_end()
    ['END', 'END']
    add_end()
    ['END', 'END', 'END']
    

    通常の呼び出しにはエラーはないようですが、呼び出しを繰り返すと問題が発生します.したがって、デフォルトのパラメータが不変オブジェクトを指す必要があることを覚えておいてください.上記の例を変更するには、Noneという不変オブジェクトで実現しなければなりません.
    def add_end(L = None):
        if L == None:
            L = []
        L.append('End')
        return L
    add_end()
    ['End']
    add_end()
    ['End']
    add_end()
    ['End']
    

    OK、これで大丈夫です.
  • 可変パラメータ
  • Pythonでは可変パラメータを定義することもでき、その名の通り、可変パラメータは入力パラメータの個数が可変であり、1個2個から任意個、0個であってもよい.数学の問題を例に、a,b,c...という数字のセットを与えます.a 2+b 2+c 2+を計算してください....この関数を定義するには、入力したパラメータを決定する必要があります.パラメータが不確定なので,まずa,b,c...,リストまたはtupleとして渡され、関数は次のように定義できます.
    def calc(numbers):
        sum = 0 
        for number in numbers:
            sum += number * number
        return sum
    calc([1,2,3])
    14
    calc((4,5,6))
    77
    

    しかし、このように呼び出す場合は、listまたはtupleを先に組み立てる必要があります.可変パラメータを利用すれば、呼び出す方法を簡略化することができます.
    def calc(*numbers):
        sum = 0 
        for number in numbers:
            sum += number* number
        return sum
    calc(1,2,3)
    14
    calc(8,9,10)
    245
    calc()
    0
    

    可変パラメータを定義することはlistまたはtupleパラメータを定義することと比較して、パラメータの前に*番号を付けるだけで、関数内部ではパラメータnumbersがtupleを受信するので、関数コードは完全に変わらない.ただし、この関数を呼び出すと、0個のパラメータを含む任意のパラメータを入力できます.