IPython / Jupyter берет блок кода в ячейке и запускает его в функции, область которой не видна пространству имен вашего модуля __main__
. Судя по этому ответу , кажется, что ячейка воспринимается как строка:
In [4]: get_ipython().magic('timeit 1 + 2')
11.2 ns ± 0.167 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)
In [5]: %%timeit
...: 1 + 2
...:
...:
11.1 ns ± 0.17 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)
Переменные из цикла известны для любой выполняемой функции IPython и времени цикла, но недоступны вне этого Timer
метода экземпляра.
Когда вы запускаете цикл for i in range(10)
(без %%timeit
) в ячейке (или просто в обычном интерактивном интерпретаторе Python), способ, которым Python обрабатывает цикл for, заключается в динамическом переназначении [ 115], j
и d
значений в каждой итерации цикла. Они все еще будут сидеть в пространстве имен __main__
(это атрибут dunder __name__
в оболочке Python) после того, как цикл завершится.
Yes. I use it all the time in automated build / deployment tasks.
Connect to the node manager and call shutdown / start for each managed server / cluster.