Есть три варианта:
1. Использовать глобальную переменную
def fun():
global i
while i < 3:
i=i+1
print (i)
i = 0
fun()
print (i)
2. Вернуть тербуемое значение как значение функции и присвоить в переменную которая передана
def fun(i):
while i < 3:
i=i+1
print (i)
return i
i = 0
i = fun(i)
print (i)
3. Вернуть значение в списке переданном как параметр
def fun(i):
while i[0] < 3:
i[0]=i[0]+1
print (i[0])
i = [0]
fun(i)
print (i[0])
Первый вариант - не слишком хорош т.к. глобальных переменных в большой программе может быть очень много и это приводит к сложностям сопровождения кода программы.
Второй вариант - довольно удобен, но нужно не забывать присваивать значение возвращаемое из функции.
Третий вариант - вообще экзотика, но и он иногда бывает востребован, особенно в рекурсиях или при работе с потоками (когда из потока хочется получить результат).