Как изменить аргумент, взятый из контекстного менеджера в блоке with? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь на лету изменить некоторые параметры, используемые функцией выхода менеджера контекста.Я пытаюсь связать параметр с переменной, известной в блоке with

from contextlib import contextmanager
import  tempfile, shutil
@contextmanager
def tempdir(suffix = '', prefix = '', dir = None, ignore_errors = False,
    remove = True):
  """
  Context manager to generate a temporary directory with write permissions.


  """
  d = tempfile.mkdtemp(suffix, prefix, dir)
  try:
    yield d
  finally:
    print "finalizing tempdir %s, remove= %s" %(d,remove)
    if remove:
      shutil.rmtree(d, ignore_errors)


willremove = True
with tempdir(remove = willremove) as t:
  #attempt to modify parameter
  willremove = False
  print "willremove:%s" %willremove


  pass

. Я ожидаю, что изменение значения willremove приведет к изменению переменной удаления в части finally: функции contextmanager, но этоне помогает

1 Ответ

0 голосов
/ 02 июля 2019

Это невозможно сделать, потому что параметры в python передаются «по присваиванию», как указал Нед Батчелдер в следующем выступлении:

https://www.youtube.com/watch?v=_AEJHKGk9ns

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...