Sobes.tech
Назад к вопросам
Junior — Middle
52

Требуется ли использовать ключевое слово global при добавлении элемента в глобальный список через метод append?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Нет, global не нужен, если глобальный список не переназначается, а только изменяется через append(). global требуется, когда в функции переменной присваивается новое значение. Метод append() меняет сам объект списка, а не имя переменной.

Определение:

В Python global используют внутри функции, чтобы указать, что имя переменной относится к глобальной области видимости. Это нужно при присваивании, например при x = .... Если же объект изменяется «на месте» — например, у списка вызывается append(), extend(), pop() — то global обычно не требуется, потому что ссылка на объект не меняется.

Пример использования:

items = []

def add_item(value):
    items.append(value)   # global не нужен

add_item(10)
print(items)  # [10]

Если же внутри функции требуется переназначить саму переменную, тогда global нужен:

items = []

def reset_items():
    global items
    items = []  # переназначение имени, поэтому нужен global

reset_items()
print(items)  # []

Пояснение кода:

В первом примере items — это глобальный список. Функция add_item() не создаёт новую переменную items, а вызывает метод append() у уже существующего списка. Поэтому Python видит изменение объекта, а не присваивание имени, и global не требуется.

Во втором примере в функции reset_items() происходит присваивание items = []. Это уже попытка связать имя items с новым объектом внутри функции. Чтобы Python использовал именно глобальную переменную, нужно явно объявить global items.

Ключевые моменты:

  • global нужен при присваивании глобальной переменной внутри функции.
  • При изменении мутабельного объекта через append(), extend(), remove() и т.п. global не нужен.
  • items.append(...) меняет содержимое списка, но не переопределяет имя items.
  • items = [...] внутри функции без global создаёт локальную переменную items.
  • Использование global стоит ограничивать: чаще лучше передавать объект в функцию и возвращать результат.