Глобальные переменные в 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

С уважением, Деян

Другие вопросы по тегам