Антипаттерн Python, которого следует избегать .


Антипаттерн Python: нечистые(IO) аргументы по умолчанию

Одна из самых любимых особенностей функций python — это аргументы по умолчанию. Мы используем их
каждый день. Но есть одна загвоздка, о которой следует позаботиться.

Аргументы функции по умолчанию оцениваются во время загрузки модуля, а не во время вызова функции.
Это помогает улучшить производительность, если аргументы по умолчанию статичны и детерминированы.

Поэтому если ваша функция недетерминирована или имеет побочные эффекты, вы можете столкнуться с проблемами.
Как показано в примере, время печати заморожено; оно было установлено один раз, когда код был впервые оценен.


# Antitpattern and  buggy
def current_datetime(dt = datetime.datetime.now()):
    print(dt)

>>> current_datetime()
2021-10-09 16:09:43.009959
>>> current_datetime()
2021-10-09 16:09:43.009959

# do this instead 

def current_datetime(dt=None) :
  if dt is None :
    dt = datetime.datetime.now()
  print(dt)

current_datetime()
>> 2022-07-24 16:07:16.435203
current_datetime()
>> 2022-07-24 16:08:16.635203


Вход в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий