2017-10-16 3 views
0

Ich habe zwei genau die gleiche Logik in if/else-Anweisung:Wie vermeidet man doppelten Code in der if/else-Anweisung?

if alert.get('comment_time_created') is None: 
here-> args = {'is_comment_visible': 1, 'comment_time_created': current_comment_time} 
     await self._db_alert.update_alert(alert['alert_id'], **args) 
    else: 
     first_comment_time_creation = datetime.strptime(alert['comment_time_created'], '%Y-%m-%dT%H:%M:%SZ') 
     current_comment_time = datetime.strptime(current_comment_time, '%Y-%m-%dT%H:%M:%SZ') 
     if current_comment_time > first_comment_time_creation: 
      await self._db_alert.update_alert(alert['alert_id'], is_comment_visible=1) 
     else: 
here->  args = {'is_comment_visible': 1, 'comment_time_created': current_comment_time} 
      await self._db_alert.update_alert(alert['alert_id'], **args) 

Gibt es eine Möglichkeit, diese Logik einmal zu tun?

+0

Kannst du nicht das Wörterbuch in einer Variablen oben speichern? – Carcigenicate

+0

Dies könnte besser für http://codereview.stackexchange.com/ – kfx

+0

@Carcigenicate können Sie erklären, bitte wie dies zu tun? –

Antwort

2

Sie scheinen die Wartezeit Linie auf jeder Bedingung zu tun, nur Ihre Kwargs ändern sich, wo Sie nicht haben comment_time_created Arg für eine bestimmte Bedingung. Dies kann reduziert werden auf:

args = {'is_comment_visible': 1} 
if alert.get('comment_time_created') is None: 
    args['comment_time_created'] = current_comment_time 
else: 
    first_comment_time_creation = datetime.strptime(alert['comment_time_created'], '%Y-%m-%dT%H:%M:%SZ') 
    current_comment_time = datetime.strptime(current_comment_time, '%Y-%m-%dT%H:%M:%SZ') 
    if current_comment_time <= first_comment_time_creation: 
     args['comment_time_created']= current_comment_time 

await self._db_alert.update_alert(alert['alert_id'], **args) 
1

Lassen Sie das dict. Rufen Sie die Methode erst nach dem Ende des äußeren if auf. Vereinfachen Sie den Block, indem Sie die Ausdrücke aufreißen, die allen Verzweigungen gemeinsam sind. So etwas wie dieses:

if alert.get('comment_time_created') is not None:  
    first_comment_time_creation = datetime.strptime(alert['comment_time_created'], '%Y-%m-%dT%H:%M:%SZ') 
    current_comment_time = datetime.strptime(current_comment_time, '%Y-%m-%dT%H:%M:%SZ') 
    if current_comment_time <= first_comment_time_creation: 
     comment_time_created = current_comment_time 

await self._db_alert.update_alert(alert['alert_id'], is_comment_visible = 1, comment_time_created = comment_time_created) 
+1

Falsch. Er scheint 'current_comment_time' vor der ersten Bedingung definiert zu haben, überprüfe seine erste Initialisierung von args – MohitC

+0

Gut entdeckt. Muss nur die erste Deklaration entfernen. – Daniel

+1

Lokale Variable 'comment_time_created' könnte vor der Zuweisung referenziert werden –

Verwandte Themen