関数の定義
2037 ワード
この記事では、関数の定義方法について詳しく説明しません.混同したり忘れたりしやすいと思う内容だけを記録します.可変パラメータリストは、関数に可変個数のパラメータを呼び出す.これらのパラメータはメタグループにパッケージされます.これらの可変数のパラメータの前に、0から複数の一般的なパラメータがあります.
通常、これらの
2 . パラメータリストの分割には、渡すパラメータがリストになっているのに、呼び出す関数は個々のパラメータ値を分離することを受け入れます.このとき、既存のリストを分解します.たとえば、組み込み関数range()には、独立したstart、stopパラメータが必要です.関数を呼び出すときに*オペレータを追加して、パラメータリストを自動的に分解できます.
同じ方法で、**オペレータを使用してキーワードパラメータを辞書として分割できます. Lambda式C++にもあり、Pythonにもこの特性が加わったlambda param:param*2次の例 を参照
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 !
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43