При написании кода на Python я часто нахожусь в поиске поведения, похожего на defvar Lisp. В принципе, если какая-то переменная не существует, я хочу ее создать и присвоить ей определенное значение. В противном случае я не хочу ничего делать, и, в частности, я не хочу переопределять текущее значение переменной.Аналог девара в Python
Я посмотрел вокруг онлайн и нашел это предложение:
try:
some_variable
except NameError:
some_variable = some_expensive_computation()
Я его помощью, и он прекрасно работает. Однако для меня это выглядит как код, который не является парадигматически правильным. Код - это четыре строки, а не 1, которые потребуются в Lisp, и требует обработки исключений, чтобы справиться с чем-то, что не является «исключительным».
Контекст в том, что я делаю интерактивное развитие. Я часто выполняю мой код кода Python, когда я его улучшаю, и я не хочу запускать some_expensive_comput() каждый раз, когда я это делаю. Я мог бы организовать запуск some_expensive_comput() вручную каждый раз, когда начинаю новый интерпретатор Python, но я бы скорее сделал что-то автоматическое, особенно для того, чтобы мой код можно было запустить неинтерактивно. Как бы программа Python в сезоне достигла этого?
Я использую WinXP с SP3, Python 2.7.5 через Anaconda 1.6.2 (32-разрядный) и работаю внутри Spyder.
PINL (Python Is LISP) ... исключения используются для управления потоком в Python (см., Например, 'StopIteration'). – kindall
, если вы делаете это в контексте класса, который вы можете сделать, если hasattr (self, 'some_variable') ', но, честно говоря, использование исключений для управления потоком прекрасное, как говорит @kindall. – roippi
Для потомков: каждый, кто использует Spyder и сохраняющий переменные во время выполнения файла Python, должен быть осторожным с [UMD Spyder] (http://stackoverflow.com/questions/13876306/spyder-umd-has-deleted-module). Запуск «import bs4» разбил все существующие объекты bs4.BeautifulSoup (давая одну из нескольких ошибок, конечная причина которых заключалась в поиске). Решение заключалось в том, чтобы посетить Tools -> Preferences -> Console -> Advanced Settings и добавить bs4 в список исключенных модулей. – kuzzooroo