2016-10-07 4 views
2

У меня есть файл следующим образом:Можно ли проверять глобальные переменные в IPython при запуске файла?

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?

+0

IPython обычно создает новое пространство имен для каждого файла '% run', а затем переносит переменные в ваше интерактивное пространство имен. Если вы действительно хотите запускать файлы непосредственно в интерактивном пространстве имен, '% run -i' сделает это. –

ответ

0

Каждый раз, когда файл python выполняется, словарь globals() сбрасывается интерпретатором. Поэтому, если вы попытаетесь сделать что-то вроде

print globals().keys() 

вы можете видеть, что данные не находятся в глобальном масштабе. Этот словарь обновляется по мере запуска программы. Поэтому я не думаю, что вы можете ссылаться на globals() IPython в программе.

проверьте это link, в соответствии с этим, глобальные опорожнения опустели.

+0

Я думаю, что с помощью IPython он пуст/None присваивает 'data' в глобальной области упреждающе (даже если конкретная строка не была/никогда не будет запущена). – David

+0

проверить эту ссылку https://docs.python.org/2/faq/programming.html#how-can-i-have-modules-that-mutually-import-each-other, в соответствии с ней она пустая глобальными. –

+0

Да, я использовал Python чуть более десятилетия, но пытался понять, почему человек, задающий вопрос, будет думать, что данные были в globals(). Просто тестировал и Cpy2 не предварительно назначить глобал так спорный вопрос. – David

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