Как правильно итерировать с re.sub () в Python

Я хочу сделать скрипт Python, который создает сноски. Идея состоит в том, чтобы найти все строки вида"Some body text.{^}{Some footnote text.}" и заменить их"Some body text.^#", где"^#" правильный номер сноски. (Другая часть моего сценария имеет дело с печатью сносок внизу файла.) Текущий код, который я использую для этого:

pattern = r"\{\^\}\{(.*?)\}"
i = 0
def create_footnote_numbers(match):
   global i
   i += 1
   return "<sup>"+str(i)+"</sup>"

new_body_text = re.sub(pattern, create_footnote_numbers, text)

Это прекрасно работает, но кажется странным объявить переменную (i) внеcreate_footnote_numbers&nbsp;функции, а затем должны вызвать его внутри этой функции. Я бы подумал, что внутри будет что-тоre&nbsp;что бы вернуть номер матча.