2015-03-06 2 views
1

Как я уже упоминал ранее, я первоначально был из фона Matlab, а затем перешел на PHP, прежде чем открывать Python. Как в Matlab, так и в PHP существуют способы создания сценариев, которые при запуске всех переменных, сбрасываемых в текущее рабочее пространство. Это рабочее пространство в Matlab является интерпретатором при вызове оттуда или рабочей области функции при вызове из функции. Я бы использовал эту возможность для констант - например, для построения графиков, где вы хотите определить набор стандартных шрифтов, ширины линий и т. Д.Переменные модуля Python в текущую рабочую область

Теперь в Python я могу импортировать модуль, но затем все константы ссылок в этом модуль требует либо from {module} import *, либо {module}.{constant}.

Это не ограничивает меня, это просто неудобство. Тем не менее, было бы неплохо иметь возможность импортировать файл констант и просто иметь константы для всех, называемых ими.

Я подозреваю, что Python этого не допускает, но я думал, что попрошу посмотреть, есть ли у кого-то умная работа.

+0

'from module import *' делает именно то, что вы просите ... его немного другое ... –

+0

Да, я так думаю. Я видел много комментариев о том, что питонический путь является явным, и многие люди говорят, что не используют 'from module import * '. Однако я никогда не видел объяснений, почему это плохо. Это просто, что вы сбросите кучу вещей, которые следующий кодер должен будет выкопать? Или есть что-то, что присуще языку, что делает его проблематичным из трудного для отслеживания точки ошибки или чего-то еще. –

+0

Дело в том, чтобы избежать столкновений. Например, как стандартная библиотека python, так и numpy имеют 'sum'. Однако функции не идентичны. Выполняя 'from numpy import *', вы заменяете встроенную 'sum' на numpy one. – TheBlackCat

ответ

0

Это не то, что вы обычно должны делать, чтобы сэкономить немного печатать, но вот один из способов вы можете сделать это:

# define some constants 
PI = 3.1415927 
ANSWER = 42 
UNLUCKY = 13 

# put them into __main__ module (your interactive session) 
if __name__ != "__main__": 
    import sys as _sys 
    _sys.modules["__main__"].__dict__.update(
     dict((k, v) for (k, v) in globals().iteritems() if not k.startswith("_"))) 
+0

В первую очередь я бы использовал это, чтобы вставлять константы в другие скрипты, а не в интерпретатор. –

+0

Это сложнее, потому что нет способа сказать, какой модуль импортирует ваш, а на самом деле второй и последующие не будут вообще запускать его (вместо этого используется кешированная копия), хотя вы тоже можете обойти это, если попытаетесь Достаточно сложно. 'from foo import * ', это. – kindall

+0

Хм ... Не конец света. ОК, если нет другого пути вокруг него, то я предполагаю, что создаю пару новых шаблонов файлов, которые начинаются с необходимых импортов, за которыми следует строка ... *. Спасибо –

0

Я не уверен, что ваш вопрос, но, возможно, ваш IDE может помочь вам избавиться от этого импорта. Например, в Spyder вы можете запустить сценарий запуска, который будет запускаться при запуске новой консоли. Если вы разместите свой импорт, вы получите прямой доступ к этим файлам.

+0

Я использую Spyder прежде всего для моего развития в Python. Это не так стабильно, как хотелось бы, т. Е. Он переставал работать на моей машине Win 7, но это очень похоже на Matlab. Я знаю, что есть место для сценария запуска, как это сделал Матлаб, но я не пробовал. Я предположил, что это будет работать как стандартный скрипт python, и любой импорт должен получить доступ через {startup script}. {Constant name}. Если бы я превратил эти файлы констант в пакет, я мог бы использовать настройки iPython> Startup для 'import' и следовать с' from ... * '. Казалось, немного создать пакет или пакеты только для констант. –

+0

Действительно. Я новичок в Python, возможно, есть лучшее решение. – josoler

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