Что такое элегантный способ абстрагирования функций, а не объектов? - PullRequest
0 голосов
/ 13 мая 2011

У меня есть функция, которая подключается к датчику через telnet / pexpect и действует как сборщик данных.

Я не хочу переписывать часть, которая входит в систему, получает данные и анализирует соответствующие выходные данные (pexpect). Однако мне нужно делать разные вещи с этим кодом и данными, которые он собирает

Например, мне может понадобиться:

  • Время до возвращения первого чтения

  • Возьмите среднее значение различного числа показаний датчика

  • Вернуть статус (который представляет собой один фрагмент данных) или вернуть датчик чтение (которое является отдельным куском данные) с выхода

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

Выше в коде, он используется мгновенно. Когда я звоню, я знаю, какой тип данных мне нужно собрать, и это все. Строить объекты слишком неуклюже.

Мое использование превысило добавление дополнительных аргументов в одну функцию.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Это такая распространенная ситуация, я удивлен, что вы еще не сделали то, что делают все остальные.

Рефакторинг вашей функции, чтобы разложить ее на более мелкие функции.

Функции являются объектами и могут передаваться в качестве аргументов другим функциям.

def step1(): 
    whatever

def step2(): 
    whatever

def step2_alternative():
    whatever

def original( args ):
    step1()
    step2()

def revised( args, step2_choice ):
    step1()
    step2_choice()

Теперь вы можете сделать это.

revised( step2 )
revised( step2_alternative )

Это просто ОО программирование с функциональными объектами.

0 голосов
/ 13 мая 2011

Не могли бы вы передать функцию обработки данных функции, которую вы описали в качестве аргумента?

Это может быть более или менее элегантно, в зависимости от вашего вкуса.(Прости меня: я ничего не знаю о pexpect, и, возможно, я даже неправильно понял твой вопрос!)

...