Jupyter notebookは名前空間が汚れて大変なことになるので、極力使っていないのですが、解析が実験ノートの一部になるときはなんだかんだで便利なので使っています。名前空間が汚れるのを防ぐために次のようなことをしています。
1. run
を定義
デコレートした関数を実行するだけの関数です。
def run(f):
return f()
2. main関数みたいなものを各セルで定義
@run
def calculate_mean():
data = np.random.random(100)
print(np.mean(data))
これでセルを実行すると関数が勝手に実行されます。当然変数は関数内でしか有効ではないので、名前空間は汚れません。関数名自体と変数名が衝突しないように、関数名は内容が分かるようにという意味でもすごく長いのにしましょう。
使ってみてください。