Ho una funzione simile a questa:
function_name(step, ... , typ):
if typ == 'some type of calc method':
if step == 1:
do_me_at_step_1(...)
elif step == 2:
do_me_at_step_2(...)
elif ...
elif typ == 'another calc method':
if step == 1:
do_me_at_step_1(...)
elif ...
Speriamo che la struttura generale sia chiara qui. Quali sono le differenze tra i diversi typ
s e come vengono gestiti? Esiste un'istanza di typ
che cambia una variabile in un modo molto diverso da tutte le altre. Tutte le istanze di typ
variano nel numero di istruzioni di passaggio separate, che vanno da if step == 1: ... else:
a if step == 1 ... elif step == 5 ... else
. Le ultime dichiarazioni elif
e else
sono diverse, in sostanza.
Come posso strutturare meglio questa funzione, perché al momento sembra orribile?
Il mio pensiero era di tirare fuori tutti i passaggi iniziali ... ma devo avere un modo per associare ogni typ
con il passo che diventa "chiave". Così ho pensato in qualche modo sulla falsariga di:
function_name(step, ... , typ):
orders = {typ1:key_step, typ2:key_step, ...}
while key_step['typ1'] != step:
if step == 1:
...
step +=1
Ma ho notato due problemi: uno, questo non sfrutta appieno il ciclo while. Mi richiederebbe di aggiungere le istruzioni fino al massimo di tutti gli typ
s che non sono "chiave", il che non mi sembra di sfruttare realmente le informazioni in orders
.
L'altro problema è quando si è out del ciclo while. Suppongo che potresti fare qualcosa di simile
if typ == 'something':
do_the_key_step_function_for_this_typ(...)
ma in realtà non sta facendo nulla di nuovo per ripulire questa funzione. Come posso cambiare la struttura di questo codice in modo che sia più pulito e più breve? C'è una struttura di base, quindi mi sento come se ci fosse un modo migliore per farlo.
Sentiti libero di chiedermi se hai bisogno di informazioni specifiche su questa funzione, ma spero che ci siano abbastanza dettagli forniti qui. Grazie!