У меня есть следующий код: def f (input, MEM = {}): if len (MEM) == 0: with open ('dill.pkl', 'rb') as f: MEM = dill.load (f) если ввод не в MEM :tended_output = ...

0
Zachary Hunter 14 Фев 2021 в 12:51

2 ответа

Лучший ответ
MEM = dill.load(...)

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

Следовательно, аргумент по умолчанию MEM - пустой словарь, и файл не выбирается каждый раз , когда вызывается функция.

Чтобы фактически изменить аргумент по умолчанию, вы можете просто использовать вместо этого:

MEM.update(dill.load(...))

См. https://docs.python.org/3/library/stdtypes. .html # dict.update.

1
mkrieger1 14 Фев 2021 в 10:14
  1. Имеет смысл расстегивать маринад только один раз или, по возможности, реже.

  2. При запуске функции во многих случаях лучше избегать циклов и использовать вместо них такие функции, как .apply, которые используют код C.

  3. Возможно, вы могли бы распараллелить, чтобы вы могли использовать все свои ядра для выполнения задачи. Возможно, это поможет: https://stackoverflow.com/a/66079049/7127519

1
Rafael Valero 14 Фев 2021 в 10:01
66194189