Nun in meiner Anwendung muss ich grundsätzlich die "Summe aller vorherigen Begriffe in Liste" verwenden, aber die Liste ist nicht nur eine Liste, sondern ein Generator von Tupel (wo die dritte Index ist der „anstößige“ einVerwenden Sie "state variable" in Generator Ausdruck
als Beispiel (nicht funktionierenden Code offensichtlich, aber es sollte die Idee zeigen.):
def calculate_minimal_charge_rate(self) -> float:
o = self.orbit
shadow_time = o.generate_shadow_light_time_list()
P = self.getIdlePowerConsumption()
a = 0
return max(a += ind[1]; P * ind[2].period/\
(ind[2].period - a) for ind in shadow_time)
Oder ein minimales Arbeitsbeispiel (beachten sie, dass dies dumm, wie ein andere Funktion aus itertools könnte das nur für mich lösen)
def calculate_minimal_charge_rate(self) -> float:
o = self.orbit
shadow_time = o.generate_shadow_light_time_list()
P = self.getIdlePowerConsumption()
a = 0
return max(a += ind[1]; a for ind in shadow_time)
Nun ist die offensichtliche „Lösung“ ist die Verwendung einer for-Schleife:
def calculate_minimal_charge_rate(self) -> float:
o = self.orbit
shadow_time = o.generate_shadow_light_time_list()
P = self.getIdlePowerConsumption()
a = 0
max_power = 0
for ind in shadow_time:
a += ind[1]
preq = P * ind[2].period/\
(ind[2].period - a)
if preq > max_power:
max_power = preq
return max_power
ist aber nicht auf diese Weise zu ausführlich für eine solche einfache „Ding“? Oh Vollständigkeit halber hier ist orbit.generate_shadow_light_time_list()
:
def generate_shadow_light_time_list(self):
"""
Returns total max time in shadow
Iterativelly calls max_time_in_shadow for each orbit until star is found
"""
o = self
try:
while o.parent.brightness <= 0:
t = o.max_time_in_shadow()
yield (o.period - t, t, o)
o = o.parent.orbit
except AttributeError:
return
return
Tupel in Python sehen aus wie '(Wert, Wert, Wert)' –
Ein Generatorausdruck muss genau das sein, ein Ausdruck. Du darfst keine Aufgaben darin machen. –
Sieh dir die Implementierung von accumute hier an: https://docs.python.org/3/library/itertools.html#itertools.accumulate –