как выполнить операцию сложения для глобальной переменной внутри функции

row=3
id=3

def KeyMove(matrix:list, ind0:vars, ind1:vars, math_symbols:str, line:vars 'принимает или row или id', ind_number:int, switch_coor=True):
        global row, id, plane1
        system('cls')

        matrix[ind0][ind1] = 0

        if math_symbols == 'plus':
            line += 1
        elif math_symbols == 'minus':
            line -= 1
        
        try:
            AddPlayer()
        except IndexError:
            line = ind_number
        
        if switch_coor is True:
            print(ind0,ind1)
        elif switch_coor is False:
            pass
        VisualMatrix(matrix)
        return line, ind_number

KeyMove(matrix=plane1, ind0=row, ind1=id, math_symbols='minus', line=row, ind_number=7)

Проблема в том, что line+=1 или line-=1 не меняют значение глобальных переменных row, id. я нашёл два решения проблемы, но 1. мне нужно чтобы я мог записать любой аргумент в line и 2. мне нужно чтобы решение проблемы оставалось в функции, а не выходила за её пределы, по типу сначала func():..., а потом a=func(5). так же это касается except IndexError: line = ind_number, но если решится первая проблема то и второй касаться смысла нету.


Ответы (1 шт):

Автор решения: Gleb

Примитивное значение передается по значению, иначе нельзя. Можно передавать какой то объект, например список, тогда он будет передаваться по ссылке и значения изменятся Например

row=[3]

def SomeFun(val):
  val[0]+=1

SomeFun(row)
row[0] == 4
→ Ссылка