2016-07-11 4 views
0

Я хотел бы запустить функцию из IPython и загрузить все свои данные в интерактивное пространство имен, точно так же, как это делает %run filename.py. Например, вот файл scratch.py:% запустить функцию Python в IPython

def foo(x): 
    a = x*2 

В IPython, я хотел бы, чтобы запустить эту функцию и быть в состоянии получить доступ к имени a. Есть ли способ сделать это?

ответ

1

Для того, чтобы сделать переменную доступной во всем мире (или в некоторых интерактивного сеанса IPython), вы должны сначала определить его как глобальный:

def foo(x): 
    global a 
    a = x*2 

В противном случае ваш a остается локальной переменной в пределах вашей функции. Более подробная информация, например. здесь: Use of “global” keyword in Python

+0

Как я могу вызвать 'foo' из IPython для доступа к' a', затем? Я попробовал «с нуля импортировать foo», затем 'foo (2)', но я все равно получаю NameError, когда я тогда набираю 'a', говоря, что он не определен. – bcf

+0

Добавьте 'return a' в конце функции. – Sosel

0

Это не вопрос 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 ...  

В чистый дизайн, функция принимает аргументы и возвращает значения, с минимумом стороны последствия. Установка глобальных переменных - это побочный эффект, который значительно усложняет отладку вашего кода.

Смежные вопросы