ami_GS's diary

情報系大学院生の備忘録。ネットワークの勉強にハマっています。

Pythonにおける*及び**の役割

3日に1回書く宣言してたけど人生稀に見る多忙さ故に挫折しそう。

なので簡単な事かきます。



色々な人のソース見てると、たま〜に、

def func(*foo, **bar):

このような物を見かけると思います。
Cでつまずいた人だと、ポインタだと思ってびっくりしちゃうかもしれません(びっくりしました)

結論から言うとポインタではありません。安心してください。

Pythonにおけるアスタリスクは可変長引数の役割をします。
引数の数に制限を欠けたくないときに便利ですね。

まず、*の場合(一つ)

def func(foo, bar, *args):
    print foo+bar

    for arg in args:
        print arg ,

func(1,2,"a","b","c")

とすると、出力は

3
a b c

となります。

foo及びbarに入る引数以外はタプルになります!便利ですね。
ちなみに入力が0個になっても動きます。


次に、**の場合(二つ)

def func(foo, bar, **kwargs):
    print foo+bar
    print kwargs

func(1,2,a="10",b="20",c="30")

とすると、出力は

3
{'a': '10', 'c': '20', 'b': '30'}

となります。辞書型ですね。


はい、見たところ確実にポインタではないようです。