Это не вопрос ipython
или %run
, а вопрос о том, что вы можете делать с переменными, созданными с помощью функции. Это относится к любой функции, выполняемой в Python.
Функция имеет пространство имен local
, где оно помещает переменные, которые вы определяете в этой функции. То есть, по дизайну, локально к функции - она не должна «истекать» в адрес имен имен (глобальный модуль или локальный из вызывающей функции). Это основная причина использования функций - для выделения ее переменных из вызывающей.
Если вам нужно, чтобы увидеть переменные в функции вы можете сделать несколько вещей:
- использование глобальной (часто признак плохого дизайна)
- использовать локальные отпечатки (временные, для целей отладки)
- вернуть значения (нормальное использование)
- использовать отладчик.
Это бесполезная функция:
def foo(x):
a = x*2
это может иметь какое-то значение
def foo(x):
a = x*2
return a
def foo(x):
a = x*2
print(a) # temporary debugging print
# do more with a and x
return ...
В чистый дизайн, функция принимает аргументы и возвращает значения, с минимумом стороны последствия. Установка глобальных переменных - это побочный эффект, который значительно усложняет отладку вашего кода.
Как я могу вызвать 'foo' из IPython для доступа к' a', затем? Я попробовал «с нуля импортировать foo», затем 'foo (2)', но я все равно получаю NameError, когда я тогда набираю 'a', говоря, что он не определен. – bcf
Добавьте 'return a' в конце функции. – Sosel