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