『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がある函数に引数を追加しようとすると生じやすいバグについて。こちらはまだちゃんと理解できていない。うーん困った。