Изменение переменной в функции с аргументом

1

Я действительно не знаю, как увеличить переменные, используя функцию с аргументом. Код ниже печатает 0 и 1, и я понимаю, почему, но я не знаю, как это исправить. Это просто общая "форма" кода, поэтому может быть любое количество переменных. Поймите, если вы посмотрите!

i=0
b=0
def increase(a):
    print(a)
    a+=1
    print(a)
for e in range (3):
    increase(i)
    increase(b)
Теги:

2 ответа

3
Лучший ответ

У Python нет ссылки на параметры, например c++ (знак &), поэтому вы можете использовать возвращаемую функцию.

i=0
b=0
def increase(a):
  print(a)
  a+=1
  print(a)
  return a
for e in range (3):
    i = increase(i)
    b = increase(b)
  • 0
    Несмотря на то, что это решает проблему для одной переменной, но это может стать очень запутанным, когда несколько переменных используются, как указано выше.
-1

Там несколько продолжительная дискуссия о том, почему вы не можете делать то, что вы пытаетесь сделать так, как вы пытаетесь это сделать, но принятый ответ здесь должен быть вам полезен. По сути, все аргументы в Python передаются по объектной ссылке, поэтому, если вы переназначите значение в своей функции, используя имя параметра, вы не изменяете значение, на которое указывает переменная, переданная вашей функции.

То, что вы пытаетесь сделать, возможно, вам просто нужно передать свою функцию изменяемым типом, например, списком. Итак, если у вас есть следующий код, он должен делать то, что вы ожидаете/хотите из своего примера:

i=[0]
b=[0]
def increase(a):
    a[0]+=1

for e in range (3):
    increase(i)
    increase(b)

print(i)
print(b)
  • 0
    Вы , вероятно , следует отметить , что ваше «решение» очень не рекомендуется. Есть причина, по которой python решил сделать числа неизменяемыми.
  • 0
    Я добавлю доклад Факты и мифы об именах и значениях Python . Очень рекомендую его всем, кто борется с «передачей по имени / значению / ссылке» в python
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню