***

6254 ワード

プログラミング言語では,関数はコードに対する最も基本的なパッケージであり,コード多重化を実現する直接的な体現である.Python言語では,関数の定義はキーワードdefで実現し,関数の戻り値はreturn文で実現する.例:
def my_func():
    return 'hello'

注意カッコの後ろのコロン(:)が抜けないようにreturn文がない場合は、関数が関数ブロックの最後の行に実行されても返され、値はNoneに戻ります.例:
def my_func1():
    print('hello')

注意:Pythonでは、関数もオブジェクトであり、関数名を変数に割り当てるか、戻り値を関数にすることができます.例:
def my_func2():
    return abs
test = my_func2()
print(test(-2))

上記コードの実行結果は2.具体的な分析は以下の通りである:my_func関数はカスタム関数で、Pythonの内蔵関数absを返します.absの機能は入力パラメータに絶対値を求めることです.test=my_func2()という文は、返されたabs関数をtestに割り当て、test(-2)を実行して実際にabs(-2)を実行します.
Pythonの関数のパラメータには、次のような遊び方があります.
  • 必須パラメータ
  • デフォルトパラメータ
  • 可変パラメータ
  • キーワードパラメータ
  • ネーミングキーワードパラメータは、以下、上述したパラメータについて順次説明する.

  • 1.必須パラメータ(位置パラメータ)
    必須パラメータは、関数定義時に入力するパラメータを決定し、入力パラメータの値は順番にコピーされます.例:
    def sayhello(name):
        print('hello', name)

    上記の関数では、nameが必須パラメータです.関数の定義に基づいて、関数には入力パラメータが必要であることがわかります.sayhello()を実行すると、次の異常が発生します.
    ---------------------------------------------------------------------------
    TypeError     Traceback (most recent call last)
    input-29-8dc54479c35f> in <module>()
    ----> 1 sayhello()
    
    TypeError: sayhello() missing 1 required positional argument: 'name'
    

    関数に必要な位置パラメータ「name」が欠けていることを示します.
    2.デフォルトパラメータ
    関数を定義するときにデフォルトのパラメータが使用されている場合は、呼び出し中に適切なパラメータを指定しないことができます.例:
    def my_func3(name, gender='M'):
        print(name,'is',gender)
    name='Chris'
    my_func3(name)
    が呼び出されると、出力はChris is Mとなる.my_func3('Rachel',gender='F')が呼び出されると、出力はRachel is Fとなる.デフォルトパラメータには、可変タイプをデフォルトパラメータとしないことに注意してください.Pythonは関数定義時にデフォルトパラメータが計算されているからです.デフォルトパラメータが可変タイプの場合、プログラムの実行時にデフォルトパラメータが変更された場合、関数が再び呼び出されると、デフォルトパラメータは前回の計算の結果になります.典型的な例は次のとおりです.
    def bug_example(arr = []):
        arr.append('a')
        return arr

    bug_が2回連続して呼び出されるとexample()の場合,戻り結果は[‘a’,‘a’]であることが分かった.2回目の呼び出しを説明するとarrの値はデフォルトで[‘a’]で変更されます.
    3.可変パラメータ
    関数を定義するときにパラメータの個数が不確定になる場合があります.たとえば、リストの各要素の和を計算するとき、リストの長さが不確定になる場合があります.この場合、可変パラメータを使用します.Pythonでは、tupleを使用して可変パラメータを格納します.たとえば、次のようにします.
    def my_func4(*args):
        print(args)

    このとき呼び出し関数my_func4('hello','world')('hello', 'world')として出力され、tupleとして表現される.
    4.キーワードパラメータ
    2つの星番号を使用してパラメータを1つのdictに収集することができます.パラメータの名前はdictのkeyで、対応するパラメータはdictのvalueです.例:
    def my_func5(**kwargs):
        print(kwargs)
    my_func5(python='happy')が呼び出された場合、出力は{'python': 'happy'}となります.
    5.キーワードパラメータの命名
    名前付きキーワードパラメータは、キーワードパラメータのkey値を制限するために使用されます.たとえば、関数がlocationとgenderの2つのキーワードパラメータのみを入力でき、任意の複数のキーワードパラメータを許可しない場合は、名前付きキーワードパラメータを使用します.名前付きキーワードパラメータは区切り記号として「*」を使用し、「*」の後のパラメータは名前付きキーワードパラメータとみなされます.たとえば
    def my_func6(name, age, *, locaton, gender):
        print(name,age,location,gender)

    呼び出しmy_func6('chr1s', 18,favorite='basketball',gender='M')時報エラー:
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    input-71-b52d1185c0b7> in <module>()
    ----> 1 my_func6('chr1s', 18,favorite='basketball',gender='M')
    
    TypeError: my_func6() got an unexpected keyword argument 'favorite'
    

    望ましくないキーワードパラメータ「favorite」が取得されたことを説明する.
    まとめ
    Python関数のパラメータのタイプは多くて、しかも混合して使うことができて、実際のプログラミングの中で多く練習する必要があって、多く体得します.上記の関数の実行結果はjupyter notebookでテストされます.