Динамическое изменение порядка вложенных циклов, содержащих бизнес-логику, в PythonPython

Программы на Python
Anonymous
Динамическое изменение порядка вложенных циклов, содержащих бизнес-логику, в Python

Сообщение Anonymous »

Я разрабатываю сценарий для кампании по использованию лабораторного оборудования. Инструмент, с которым мы работаем, принимает различные параметры, такие как координаты X и Y, мощность, задержка, импульс и т. д.
Один из важнейших аспектов операции включает в себя 2D-сканирование объекта. , что требует перебора координат x и y. Последовательность и количество циклов могут меняться с учетом различий в параметрах.
Моя цель — повысить гибкость следующего псевдокода, в идеале, если это возможно, снизить уровень вложенных циклов.< /p>

Код: Выделить всё

for x, y in zip(x_coords, y_coords):
instr.move_axes(x, y)
do_something_else_x_y()

for power in params['power_list']:
instr.set_power(power)
do_something_else_power()

for delay in params['delay_list']:
instr.set_delay(delay)
do_something_else_delay()

for pulse in params['pulse_list']:
instr.set_pulse(pulse)
do_something_else_pulse()
Я попробовал что-то с помощью itertools.product(), который сглаживает вложенные циклы for, но я не знаю, как вставить логику для связи с инструментом, не прибегая к множеству условий if . Для связи с инструментом требуется «долгое» время, поэтому я хочу устанавливать значение в инструменте только при изменении.
Следующий код проще изменить порядок элементов но, похоже, в конце требуется больше логики, чтобы инструмент не назывался ненужным.

Код: Выделить всё

for (x, y), power, delay, pulse in product(zip(x_coords, y_coords), power_list, delay_list, pulse_list):
print(x, y, power, delay, pulse)

# implement additional logic to check if x, y, power, delay, pulse etc. changed so call the instrument.

if difference_xy():
instr.move_axes(x, y)
do_something_else_x_y()

if difference_power():
instr.set_power(power)
do_something_else_power()

if difference_delay():
instr.set_delay(delay)
do_something_else_delay()

if difference_pulse():
instr.set_pulse(pulse)
do_something_else_pulse()

do_something_else()
Будем признательны за любые идеи по этому вопросу.


Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-python

Вернуться в «Python»