Вместо форсирования глобалов на основе кода (это может быть решением вызывающей стороны), я предпочитаю идею сохранения состояния, связанного с экземпляром функции. Класс хорош для этого, но не очень хорошо показывает, чего вы пытаетесь достичь, и может быть немного многословным. На мой взгляд, использование преимуществ замыканий намного чище.
def function_the_world_sees():
a = {'a':1,'b':2,'c':3}
def actual_function(arg0, arg1):
a[arg0] = arg1
return a
return actual_function
stateful_function = function_the_world_sees()
stateful_function("b", 100)
stateful_function("b", 200)
Главное предостережение, которое следует иметь в виду, заключается в том, что когда вы делаете назначения в "actual_function", они происходят внутри "actual_function". Это означает, что вы не можете переназначить a на другую переменную. Обходное решение, которое я использую, - это поместить все мои переменные, которые я планирую переназначить, либо в один список элементов для каждой переменной, либо в словарь.