Давайте для начала определимся с терминами. Вероятно, вы имеете в виду не аргументы, а параметры. Параметры — это условные обозначения, которые вводятся при определении функции. Аргументы — реальные значения, передающиеся при вызове.
Внутри функции находится своя, локальная область видимости, и все параметры функции находятся только в этой локальной области.
Когда мы обращаемся к переменной, её название сначала ищется в локальной области и расширяется вплоть до глобальной, если название не было найдено. Давайте приведём пример.
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.