Глобальные переменные в pl/python
Следующий код прекрасно работает в моей Python IDE:
counter = 1000
def increment():
global counter
counter += 1
increment()
print(counter)
Но когда я копирую и вставляю код в функцию pl/python (как показано ниже), он не работает.
counter = 1000
def increment():
global counter
counter += 1
increment()
plpy.notice(counter)
Возвращенное сообщение об ошибке:
ERROR: NameError: name 'counter' is not defined
CONTEXT: Traceback (most recent call last):
PL/Python function "testing", line 9, in <module>
increment()
PL/Python function "testing", line 6, in increment
counter += 1
PL/Python function "testing"
1 ответ
Хорошо, я должен был изменить это на это:
varcol = {"counter": 1000}
def increment(varcol):
varcol["counter"] += 1
increment(varcol)
plpy.notice(varcol["counter"])
Скорее неловко, но похоже, что ключевое слово global нельзя использовать обычным способом в pl/python. Было бы хорошо, если бы документы упоминали об этом...
Вы должны использовать один из двух словарей: SD ("статический словарь") или GD ("глобальный словарь"), который сохраняет значения между вызовами одной и той же функции или глобально - подробности здесь:
if SD.has_key("someval"):
someval = SD["someval"]
else:
someval = inital_value
SD["someval"] = someval
С уважением, Деян