関数の定義

2037 ワード

この記事では、関数の定義方法について詳しく説明しません.混同したり忘れたりしやすいと思う内容だけを記録します.
  • 可変パラメータリストは、関数に可変個数のパラメータを呼び出す.これらのパラメータはメタグループにパッケージされます.これらの可変数のパラメータの前に、0から複数の一般的なパラメータがあります.
  • def write_multiple_items(file, separator, *args):
        file.write(separator.join(args))
    

    通常、これらの パラメータは、すべての残りの入力パラメータが関数に渡されるため、パラメータリストの最後のパラメータである.*argsの後に現れるパラメータはキーワードパラメータであり、位置パラメータではなくキーワードとしてのみ使用できることを意味します.
    >>> def concat(*args, sep="/"):
    ...    return sep.join(args)
    ...
    >>> concat("earth", "mars", "venus")
    'earth/mars/venus'
    >>> concat("earth", "mars", "venus", sep=".")
    'earth.mars.venus'
    

    2 . パラメータリストの分割には、渡すパラメータがリストになっているのに、呼び出す関数は個々のパラメータ値を分離することを受け入れます.このとき、既存のリストを分解します.たとえば、組み込み関数range()には、独立したstart、stopパラメータが必要です.関数を呼び出すときに*オペレータを追加して、パラメータリストを自動的に分解できます.
    >>> list(range(3, 6))            # normal call with separate arguments
    [3, 4, 5]
    >>> args = [3, 6]
    >>> list(range(*args))            # call with arguments unpacked from a list
    [3, 4, 5]
    

    同じ方法で、**オペレータを使用してキーワードパラメータを辞書として分割できます.
    >>> def parrot(voltage, state='a stiff', action='voom'):
    ...     print "-- This parrot wouldn't", action,
    ...     print "if you put", voltage, "volts through it.",
    ...     print "E's", state, "!"
    ...
    >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
    >>> parrot(**d)
    -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
    
  • Lambda式C++にもあり、Pythonにもこの特性が加わったlambda param:param*2次の例
  • を参照
    >>> def make_incrementor(n):
    ...     return lambda x: x + n
    ...
    >>> f = make_incrementor(42)
    >>> f(0)
    42
    >>> f(1)
    43