#python #ipython
#python #ipython
Вопрос:
У меня есть файл, подобный so:
import pandas a pd
def a_func():
print 'doing stuff'
if __name__ == "__main__":
if 'data' not in globals():
print 'loading data...'
data = pd.read_csv('datafile.csv')
Когда я запускаю файл в IPython с run file.py
помощью, он всегда загружает данные, но когда я печатаю globals.keys()
в IPython, я вижу data
переменную. Есть ли способ получить доступ к глобальным переменным из IPython из моего file.py
скрипта, чтобы мне не приходилось загружать данные каждый раз, когда я запускаю скрипт в IPython?
Комментарии:
1. IPython обычно создает новое пространство имен для каждого вашего файла
%run
, а затем впоследствии переносит переменные в ваше интерактивное пространство имен. Если вы действительно хотите запускать файлы непосредственно в интерактивном пространстве имен,%run -i
сделайте это.
Ответ №1:
Каждый раз, когда выполняется файл python, словарь globals() сбрасывается интерпретатором. Так что, если вы попытаетесь сделать что-то вроде
print globals().keys()
вы можете видеть, что «данные» не в глобальных. Этот словарь обновляется по мере запуска программы. Поэтому я не думаю, что вы можете ссылаться на globals() IPython в программе.
проверьте эту ссылку , согласно ей глобальные переменные очищаются.
Комментарии:
1. Я думаю, что с IPython он предварительно помещает пустое / None, присвоенное
data
в глобальную область видимости (даже если конкретная строка не была / никогда не будет запущена).2. проверьте эту ссылку docs.python.org/2/faq /… , в соответствии с этим это пустые глобальные переменные.
3. Да, я использую Python чуть более десяти лет, но пытался понять, почему человек, задающий вопрос, подумал
data
бы, что это в globals() . Только что протестировал его, и Cpy2 не назначает глобальные переменные, поэтому это спорный вопрос.