基本的なことだけど、忘れてきたので備忘録
任意の数の引数を取る関数は2つの方法で実現可能。
##シーケンス型
仮引数の前に*をつけることで、複数引数を一つのタプルとして扱う方法。
test.py
def test(*foo):
print "Hello " + " and ".join(foo)
test("Jim", "Hiroshi")
実行結果
Hello Jim and Hiroshi
つまりは「可変長引数は関数の仮引数群の中で1個だけ」かつ「仮引数群の最後に位置しなければならない。」ということがわかる。
##辞書型
仮引数の前に**をつけることで、複数引数を一つの辞書として扱う方法。
こっちのやり方は直感的だけど、実引数としてキーワード付き引数を使わなければならない。
test2.py
def test(**foo):
print "Hello " + foo.get("name1") + " " + foo.get("name2")
test(name1 = "Jim", name2 = "Hiroshi")
実行結果
Hello Jim and Hiroshi
ちなみに可変長仮引数はfooFunc(*foo2,*foo)、fooFunc(**foo2,**foo)、fooFunc(*foo,foo2)、fooFunc(**foo,foo2)はSyntaxErrorなので注意。
fooFunc(foo2,*foo)、fooFunc(foo2,**foo)、fooFunc(*foo2,**foo)は問題ない。