Выполнении программы с временную директорию и измеряя время выполнения


Мне нужен код комментарий для лучшей практики и Кодекса правильность следующего куска кода. запустите выполнение программы и проверяет на выходе. Если вывод действительное состояние может быть найден в VALID_SOLUTIONS.

elapsed = None
tmpdir = tempfile.mkdtemp(prefix='structure-%s-' % os.path.basename(instance))
try:
  for r in range(options.repeat):
    run_returncode, run_status, run_elapsed = run(
        r, path, program, tmpdir, options.timeout, options.satisfiable)
    if run_status not in VALID_SOLUTIONS:
      returncode, status, elapsed = run_returncode, run_status, None
      break

    if r == 0:
      # Set the expected results
      returncode, status = run_returncode, run_status
      elapsed = [run_elapsed]
    else:
      if returncode != run_returncode or status != run_status:
        # Results don't match
        returncode, status, elapsed = None, 'inconsistent_results', None
        break
      else:
        # Extra set
        elapsed.append(run_elapsed)
except Exception as e:
  # Unexpected error in script itself
  print(e, file=sys.stderr)
  #traceback.print_exc()
  status = 'error'
except KeyboardInterrupt as e:
  print('interrupted', file=sys.stderr)
  returncode, status, elapsed = None, 'interrupted', None
finally:
  if status in VALID_SOLUTIONS:
    avg = sum(elapsed) / len(elapsed)
    std = (sum((e - avg)**2 for e in elapsed) / len(elapsed)) ** 0.5
    ci = 1.96 * std / (len(elapsed) ** 0.5)
    print(instance, returncode, status, avg, ci)
  else:
    print(instance, returncode, status, None, None)

  sys.stdout.flush()
  exit(int(status not in ['interrupted'] + VALID_SOLUTIONS))


391
14
задан 1 февраля 2011 в 01:02 Источник Поделиться
Комментарии
2 ответа

Ну, во-первых, не бойтесь пустых строк. Этот код очень трудно читать.

Во-вторых, функции-это хорошее изобретение. ;) Что код, как сейчас-это голый кусок кода, без указания, где большинство параметров, и кажется, что приемлемых решений глобальный, как вы оприходовали его? Это не имеет для меня большого смысла.

Просто пока у вас есть функция, которая вызывается Run (), чтобы запустить программу, имело бы смысл иметь функцию, чтобы запустить его несколько раз, с тестами для этого у вас есть.

Я также не уверен, почему вы поймать KeyboardInterrupt, но не похоже, чтобы на самом деле делать ничего с ним, кроме установки статуса, а затем проверяем статус. Можно просто сделать выход прямо из этого обработчика исключений, то будет понятнее.

В противном случае это, кажется, хорошо. Отзывы о правильности невозможно, когда ваш код не работает пример. Но опять же, тесты, как правило, работают лучше, чем есть комментарии код, хотя они не являются взаимоисключающими.

12
ответ дан 1 февраля 2011 в 01:02 Источник Поделиться

Комментарии. Хорошо написанный код говорит вам, как проблема решается. Хорошо написано комментариев вам сказать, что проблема решается. Большие комментарии Вам сказать, какие предположения программист делает о данных собирается и выходит.

В конце концов статья: у тебя есть волшебная константа. Лучшая практика заключается в том, что вы объявляете константы с описательные имена переменных.

Переменные 'R' и 'Е': нет ни одной буквы имена переменных пожалуйста, спасите для тех, которые настолько важны, никто не будет вам их неправильно, что в принципе Х,Y,Z и T, в контексте для декартовых координат или параметризованных участков. И 'E' был исключением несколько строк назад, теперь это элемент списка?

И наконец, х**.5 является точной, но функция sqrt(X) является более читаемым.

5
ответ дан 1 февраля 2011 в 02:02 Источник Поделиться