Параметрам можно задать значения по умолчанию: def greet(name, greeting="Привет"):. Тогда greeting необязателен: greet("Аня") использует "Привет", а greet("Аня", "Здравствуй") — переданное значение. Параметры со значением по умолчанию идут после обычных.
Аргументы можно передавать по имени (именованные): greet(name="Аня", greeting="Хай") — порядок тогда не важен, и код читается яснее.
Переменные, созданные внутри функции, локальные: они существуют только внутри неё и не видны снаружи. Это называется областью видимости. Функция получает данные через параметры и отдаёт через return — это делает её независимой и предсказуемой. Не полагайтесь на глобальные переменные внутри функций без необходимости: явная передача аргументов надёжнее.