Как получить(вернуть) значение переменной из функции в python 3?

Совсем не могу понять логику.
Написал короткий код для эксперимента.
def fun(i):
  while i < 3:
    i=i+1
    print (i)
  return i
i = 0
fun(i)
print (i)

получаю:
python3 /home/user/int.py 
1
2
3
0 <- получил ноль, а ожидал "3"

Что я делаю не так?
Спасибо.
  • Вопрос задан
  • 38399 просмотров
Решения вопроса 2
@tplus
i внутри функции и вне её - разная i.
Если сделать i = fun(0), тогда внешняя i будет равна 3.
Ответ написан
Комментировать
Sly_tom_cat
@Sly_tom_cat
.
Есть три варианта:
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])


Первый вариант - не слишком хорош т.к. глобальных переменных в большой программе может быть очень много и это приводит к сложностям сопровождения кода программы.

Второй вариант - довольно удобен, но нужно не забывать присваивать значение возвращаемое из функции.

Третий вариант - вообще экзотика, но и он иногда бывает востребован, особенно в рекурсиях или при работе с потоками (когда из потока хочется получить результат).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@AprilSnow
Твой последний принт выводит 5 строку, где i остается равной нулю, т.к. она не переопределяется в глобальной области видимости
Ответ написан
Комментировать
STLEON
@STLEON
In Console We Trust. Code hard. Or die.
def fun(i):
  while i < 3:
    i=i+1
    print (i)
  return i
i = 0
new_i = fun(i)
print('='*10, new_i, sep='\n')
Ответ написан
Комментировать
@FlooJack
def fun(i):
  while i < 3:
    i=i+1
  return i

i = 0
print(fun(i))

Вы два раза вызываете "print", снаружи и внутри. Ваша функция возвращает, значение переменной. После
i = 0
fun(i)
print (i) # здесь вы вызвали i = 0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы