Я пишу программу с двумя различными состояниями (конвертер обратимого блока между футами и метрами), а несколько функций в программе зависят от текущего состояния (текущего значения переменного itertools. cycle() итератор). Пользователь может вызвать обратную функцию, чтобы переключить текущее состояние и отменить функцию преобразования вычислений.Чтение текущего значения итератора без приращения в Python
В настоящее время я использую следующий (CurrentState) для возврата следующего значения итератора, как это:
self.currentstate = cycle(range(2))
def reverse(self):
if next(self.currentstate) == 0:
self.feet_label.grid(column=2, row=2, sticky=tk.W)
if next(self.currentstate) == 1:
self.feet_label.grid(column=2, row=1, sticky=tk.W)
def calculate(self, *args):
if next(self.currentstate) == 0:
# convert feet to meters
if next(self.currentstate) == 1:
# convert meters to feet
К сожалению, всякий раз, когда вызывается функция, и если оператор вычисляется итератор цикла увеличивается на следующий оператор и следующий вызов приведут к чему-то другому. Функция вычисления, скорее всего, будет вызвана много раз в одном и том же состоянии, и поэтому я хотел бы каким-то образом восстановить текущее значение итератора без изменения или увеличения оператора.
def calculate(self, *args):
if currentvalue(self.currentstate) == 0:
# convert feet to meters
if currentvalue(self.currentstate) == 1:
# convert meters to feet
Я нашел действительно уродливые обходные с участием вызова следующего (CurrentValue) дважды в каждом случае заявление для сброса двоичного значения. Это может быть очень ужасным способом написания двух государственных программ, подобных этому, но похоже, что должен быть способ сделать это. Я очень новичок в Python и также не могу полностью понять основную теорию итераторов.
Благодаря