Форум сайта python.su
0
Трудно сформулировать суть проблемы.
В общем, хочу чтобы функция могла менять значения глобальной переменной согласно заданным аргументам, среди которых одновременно находится сам идентификатор переменной (он бывает разным, зависимо от обстоятельств).
def my_func(var, act): global ############# здесь я перечислил все глобальные переменные, которые могут быть изменены ###################### if var >= 0 and act == "pls": var += 1 elif var >= 1 and act == "mns": var -= 1 elif var == 25 and act == "pls": None
Офлайн
Параметры методов создаются как локальные переменные, насколько я знаю. Т.е. var += 1 изменяет локальную переменную, значение которой передано в виде параметра, а не саму передаваемую переменную. Т.е. как-то так
def my_func(var, act): # созданы переменные var и act, существующие внутри метода global ############# здесь я перечислил все глобальные переменные, которые могут быть изменены ###################### if var >= 0 and act == "pls": var += 1 # изменение локальной переменной - присвоение новой ссылки x = 100 my_func(x, "pls") # передача ссылки на объект 100, а не на переменную х print(x) # 100
Офлайн
221
Egorro13нет, учите матчасть, в частности в области изменяемых и не изменямых типов данных в питоне
my_func(x, “pls”) # передача ссылки на объект 100, а не на переменную х
Офлайн
JOHN_16Не очень понял, а при чем тут изменяемость типов, если речь о передаче параметров? Если в качестве var будет передана ссылка на изменяемый объект типа списка, то присвоение var = list(('new', ‘list’)) точно так же присвоит ссылку на новый объект переменной метода и никак не затронет ни исходный объект, ни переменную, которая на него ссылалась и передавалась при вызове как параметр метода. Но это не означает, что список вдруг станет неизменяемым объектом - только то, что параметр внутри метода и переменная, использованная при вызове - не одно и то же.
нет, учите матчасть, в частности в области изменяемых и не изменямых типов данных в питоне
Отредактировано Egorro13 (Апрель 30, 2019 18:33:11)
Офлайн
221
Egorro13
а я ничего не говорил про присваивание. Внимательно смотрите что я процитировал. Аргументы передаются в функции либо по значению, либо по ссылке. Это стандартная терминология от которой нету смысла уходить в сторону. В том примере что написали вы, а именно “передача ссылки на объект 100” формулировка звучит плохо. Если бы там был бы список, то звучало бы все то же самое, а смысл был бы совершенно другой
Офлайн
JOHN_16Понял, о чем речь, спасибо. В данном случае я имел в виду, что значением переменной является ссылка на объект, а не так давно при изучении основ вроде попадалось, что в Питоне все значения являются объектами, включая байты, в отличие от пока еще более привычной Явы, где по значению передаются примитивы, по ссылке - объекты классов…
Egorro13а я ничего не говорил про присваивание. Внимательно смотрите что я процитировал. Аргументы передаются в функции либо по значению, либо по ссылке. Это стандартная терминология от которой нету смысла уходить в сторону. В том примере что написали вы, а именно “передача ссылки на объект 100” формулировка звучит плохо. Если бы там был бы список, то звучало бы все то же самое, а смысл был бы совершенно другой
Офлайн
221
Поэтому я и сказал что нужно учить матчасть. В питоне все объект. Переменная это ссылка на объект. Переменная это не ссылка участок памяти. Привычного понятия указателя в питоне нет. В питоне нету примитивов и сложных объектов. В питоне есть объект. Объекты бывают изменяемые и не изменяемые. Аргументы функций передаются по ссылке. По ссылке есть объект. Объекты, как мы уже знаем, в аспекте типов данных бывают изменяемые и не изменяемые. Нельзя передать переменную типа int в функцию так, что бы она была изменяемая. Потому что не метод передачи влияет на возможность изменить объект, а сам объект.
Офлайн
JOHN_16И как все это противоречит изначальному утверждению, что в метод была передана взятая из переменной ссылка на объект 100, а не само значение 100 и не ссылка на переменную, хранящую значение или ссылку на него?
Поэтому я и сказал что нужно учить матчасть. В питоне все объект. Переменная это ссылка на объект. Переменная это не ссылка участок памяти. Привычного понятия указателя в питоне нет. В питоне нету примитивов и сложных объектов. В питоне есть объект. Объекты бывают изменяемые и не изменяемые. Аргументы функций передаются по ссылке. По ссылке есть объект. Объекты, как мы уже знаем, в аспекте типов данных бывают изменяемые и не изменяемые. Нельзя передать переменную типа int в функцию так, что бы она была изменяемая. Потому что не метод передачи влияет на возможность изменить объект, а сам объект.
Офлайн
221
Сам факт подобной формулировки выдает не понимание=) потому что с практической стороны никто так не говорит - это бессмысленно, если ты пытаешься кому то что то объяснить.
Офлайн
JOHN_16Спасибо, постараюсь запомнить))
Сам факт подобной формулировки выдает не пониманиепотому что с практической стороны никто так не говорит - это бессмысленно, если ты пытаешься кому то что то объяснить.
Офлайн