何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『Effective Python』Item 18: 可変長引数で視覚的ノイズを減らそう

『Effective Python』の続き。*argの使い道。 www.effectivepython.com

Python函数の引数に*をつけると可変長引数となる。Item 18では2つ注意点をあげている。 まず、*をつけるとタプルとして展開される点である。

例えば、次のコードを実行すると何が起きるだろうか…。

import itertools

def my_func(*args):
    print(args)

it = itertools.count(3)
my_func(*it) # danger!

私の環境で実施したところ、たった2GBしかないメモリの内1.8GBが使用中となり…。list(*it)tuple(*it)なら気づくかもしれないが函数の呼び出しにイテレータを入れる際には気をつけましょう。…前回もそのような函数の引数とイテレータの話であった。

もう1つは*argがある函数に引数を追加しようとすると生じやすいバグについて。こちらはまだちゃんと理解できていない。うーん困った。