Python dict для выбора функции запускает их все - PullRequest
0 голосов
/ 11 мая 2018

Поэтому я попытался сократить вложенные if, используя dict, чтобы выбрать функцию для запуска. При вызове execute в тесте я обычно вызываю его с помощью "execute (" BACKUP "," / home / src "," / home / dest ")"

Но по какой-то причине он запускает обе опции BACKUP дважды. Что я делаю неправильно? Я использую Python3

    def execute(jobtype, src, dst):
        if jobtype == "FULL":
            _o_src = fs.Index(src)
            fs.MakeFolders(_o_src.GetFolders(), dst)
            fs.MakeFiles(src, dst, _o_src.GetFiles())
        if jobtype == "INCREMENTAL":
                print("DO INCREMENTAL BACKUP " + src + " TO " + dst)
    # Do the things
    options = {
                "BACKUP": execute(self.jobtype, self.src, self.dst),
                "RESTORE": execute(self.jobtype, self.dst, self.src),
              }
    options[jobtype]()

1 Ответ

0 голосов
/ 11 мая 2018

Вы не сохраняете свою функцию execute в вашем options дикте.Вы сохраняете результат вызова этой функции.И поскольку в любом случае это одна и та же функция с передачей различных параметров, вам на самом деле не нужно, чтобы эта функция была значениями в вашем dict.Вам нужны параметры.Измените последние четыре строки на:

options = {
          "BACKUP": [self.jobtype, self.src, self.dst],
          "RESTORE": [self.jobtype, self.dst, self.src],
          }
execute(*options[jobtype])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...