Изменение глобальной переменной через функцию в Python 3
недавно начал изучать Python 3 и столкнулся с такой проблемой: я не могу изменить глобальную переменную через функцию, использовав переменную в виде аргумента, подскажите, пожалуйста, возможно ли вообще такое сделать?
name = "Tom"
def set_name (before, after):
before = after
set_name (name, "John")
Что-то на подобие такого, но имя всё равно остаётся "Том"
Ответы (2 шт):
Для работы с глобальной переменной:
def set_name(after):
global name
name = after
set_name("John")
Но так делать нехорошо - работать напрямую с глобальными переменными. Лучше так, но это бессмысленно, т.к. можно переопределить переменную без функции. Даю для учебных целей.
def set_name(after):
return after
name = set_name("John")
Может ваш пример неудачный? Почему не катит просто
name = "Tom" # Изначально присвоили Том.
name = "John" # Поменяли на Джон.
Функции стоит применять, если мы делаем какие-то операции с данными внутри неё. А в данном случае идёт просто присваивание.
Строки в python неизменяемы. Такое можно сделать только с изменяемым объектом.
Например так:
def set_name(before, after):
before.val = after
class A:
def __init__(self, val):
self.val = val
name = A("Tom")
set_name(name, "John")
Или просто со списком из одного элемента:
def set_name(before, after):
before[0] = after
name = ["Tom"]
set_name(name, "John")