Функция может получать настройки из нескольких источников: из полученных аргументов, глобальных констант или переменных. Последний вариант с глобальными переменными создает в коде неявные связи: тронь код в одном месте и он сломается в другом.


Пример

Плохо:


import requests

from environs import Env


NASA_API_URL = ...


def download_nasa_photos(nasa_api_key):
    params = {
        'api_key': nasa_api_key,
    }
    response = requests.get(NASA_API_URL, params=params)
    ...


def main():
    env = Env()
    env.read_env()

    nasa_api_key = env.str('NASA_API_KEY')
    download_nasa_photos(nasa_api_key)


if __name__ == '__main__':
    main()

Хорошо:


import requests

from environs import Env


def download_nasa_photos(nasa_api_key):
    nasa_api_url = ...
    params = {
        'api_key': nasa_api_key,
    }
    response = requests.get(nasa_api_url, params=params)
    ...


def main():
    env = Env()
    env.read_env()

    nasa_api_key = env.str('NASA_API_KEY')
    download_nasa_photos(nasa_api_key)


if __name__ == '__main__':
    main()

Хорошо:


import requests

from environs import Env


def download_nasa_photos(nasa_api_key, nasa_api_url):
    params = {
        'api_key': nasa_api_key,
    }
    response = requests.get(nasa_api_url, params=params)
    ...


def main():
    env = Env()
    env.read_env()

    nasa_api_key = env.str('NASA_API_KEY')
    nasa_api_url = env.str('NASA_API_URL', ...)
    download_nasa_photos(nasa_api_key, nasa_api_url)


if __name__ == '__main__':
    main()