Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как работает аргумент функции, точнее аргумент функции он находится в глобальной области видимости или в локальной?

Программирование+2
Анонимный вопрос
  ·   · 599
Программирование, Python, математика. Выпускник Ян...  · 27 янв 2021  · cdarr.ru

Давайте для начала определимся с терминами. Вероятно, вы имеете в виду не аргументы, а параметры. Параметры — это условные обозначения, которые вводятся при определении функции. Аргументы — реальные значения, передающиеся при вызове.

Внутри функции находится своя, локальная область видимости, и все параметры функции находятся только в этой локальной области.

Когда мы обращаемся к переменной, её название сначала ищется в локальной области и расширяется вплоть до глобальной, если название не было найдено. Давайте приведём пример.

def foo(a):
    print(a)
    print(b)

a = 3
b = 4
>> foo(5)
5
4

Как мы видим, внутри функции foo определилась локальная переменная a, поэтому при вызове print на ней мы получили 5. Переменной b в локальной области нет, поэтому она нашлась в следующей, глобальной области.

Определение новых переменных по умолчанию производится в локальной области:

def foo(a):
    print(a)
    a = 4
    print(a)


a = 5
print("Было:", a)
foo(a)
print("Стало:", a)

Вывод:
Было: 5
5
4
Стало: 5

Как мы видим, переменная a изменилась в локальной области, однако в глобальной так и осталось значение 5. Но есть способ из локальной области изменить глобальную переменную с помощью инструкции global.

def foo():
    global a
    print(a)
    a = 4
    print(a)


a = 5
print("Было:", a)
foo()
print("Стало:", a)

Вывод:
Было: 5
5
4
Стало: 4

Как мы видим, переменная a изменилась глобально. Однако, использовать инструкцию global в принципе не рекомендуется, потому что это, во-первых, не очень согласуется с классической функцией, а во-вторых, может усложнить разработку и восприятие кода. Случаев, в которых имеет место использовать global — единицы, во всех остальных случаев используют возвращение значения из функции с помощью return.

2 эксперта согласны