Неуказанные аргументы функции
Анти-паттерн
Функция может получать настройки из нескольких источников: из полученных аргументов, глобальных констант или переменных. Последний вариант с глобальными переменными создает в коде неявные связи: тронь код в одном месте и он сломается в другом.
Пример¶
Плохо:
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()