Я играл с системой кэширования вывода в IPython и заметил странное поведение, дающее неожиданные результаты при использовании единственного подчеркивания _
для получения предыдущего вывода.
Передзаписывая этот вопрос, я не знал о системе кэширования вывода, реализованной в IPython, и решил, что в качестве фиктивной переменной следует использовать двойное подчеркивание __
, если я хочу использовать предыдущий вывод, обращаясь к специальной переменной _
-Variable.
Рассмотрим следующую сессию:
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.3.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: 2*3
Out[1]: 6
In [2]: 4 + _ # expect 10, OK
Out[2]: 10
In [3]: __, something = 1, 2
In [4]: 3*3
Out[4]: 9
In [5]: 3 + _ # expect 3+9=12, but:
Out[5]: 13
Как видно выше, после присвоения значения __
использование _
не дает ожидаемого результата.
После прочтения ссылок, связанных ранее, я знаю, что мне, вероятно, просто не стоит связываться с _
, __
или ___
.Может ли назначение одного из них просто заморозить все остальные?
Документация не намекает на эти проблемы.Кроме того, я нахожу это крайне нелогичным, поскольку обычная оболочка Python ведет себя по-разному.(После просмотра приведенного выше примера в обычной оболочке конечный результат будет таким, как и ожидалось!)
Заранее спасибо за ваш отзыв!