2017-05-25 5 views
0

Können wir Call-Methoden basieren auf, wenn elif sonst haben ... Beispiel:wenn sonst Python Funktionsaufruf oder Methodenaufruf

if line2[1] = '1': 
    a(line2) 
elif line2[1] = '2': 
    b(line2) 
elif line2[1] = '3': 
    c(line2) 

und die Liste geht weiter. Können wir Karten verwenden und die Funktion aufrufen? Sagen

Beispiel für Line-Eingänge:

line = [ '1', 'sagt', 'Hallo']

line = [ '2', 'Wie', 'Ist']

Code:

def g(line) 
    my_map = { '1': a(line), 
      '2': b(line), 
      '3': c(line, b), 
      ...... 
      and the list goes on 
      } 

here if line[0] = '1' call a(line) 
     elif line[0] = '2' call b(line) 

Wie rufe ich Funktion basierend auf die Eingabe .

Bitte senden Sie Beispielcode, wenn möglich

Dank Rakesh


line = [ '1', 'sagen', 'Hallo', '', '', '', '' , '', '', .... geht 5-15 mal weiter] Im selben Beispiel wie oben, wenn ich auch andere Variablen zuordnen muss. Wie mache ich es.

if line2[1] == '8': 
      p.plast = line2[3] 
      p.pfirst = line2[4] 
      p.pid = line2[9] 

elif line2[1] == 'I': 
      p.slast = line2[3] 
      p.sfirst = line2[4] 
      p.sid = line2[9] 
elif line2[1] == 'Q': 
      p.tlast = line2[3] 
      p.tfirst = line2[4] 
      p.tid = line2[9] 

Gibt es auch eine Arbeit dafür.

+0

statt (weil Sie die Funktion aufrufen) des Hinzufügens eine Umbruchfunktion 'g', können Sie ein funktionswertiges Wörterbuch haben. Wenn Sie einige Standardargumente übergeben müssen, wie im Fall von '3', können Sie ein' Lambda' verwenden. –

+0

Zeile wird als Variable an diese Funktion gesendet. g (Linie) wird von einem anderen Ort aufgerufen. . Kannst du mir ein Beispiel schicken, bitte. Ich bin neu in diesem Bereich. –

Antwort

5

aktualisieren: Eine schwierige Methode

def make_change(line, p): 

    # Each value of the dict will be another dict in form property:index. 
    # Where property is key of p object to be set/updated, index is index of line with which property should be updated. 

    another_map = { 
     "V": {'vlast': 3, 'vfirst': 5, 'vnone': 7}, 
     "S": {'slast':2, 'sfirst':9, 'snone':4} 
    } 

    val = another_map.get(line[1], None) 
    if val is not None: 
     # iterating over val items to get which property to set and index if line to set 
     for key, item in val.iteritems(): 
      p[key] = line[item] 

    print p 


new_list = ["V", "S", 1,2,3,4,5,6,7,8,9,10,11,12,13] 
make_change(new_list, {}) 

Jetzt new_list[1] Ende ändern finden Sie in der Ausgabe


if line2[1] = '1': 
    a(line2) 
elif line2[1] = '2': 
    b(line2) 
elif line2[1] = '3': 
    c(line2) 

Will perfekt funktioniert.

Aber Ihre zweite Methode, weil nicht, wenn Sie my_map = { '1': a(line), ... } schreiben, my_map['1']None sein wird oder der Wert der Funktion zurückgegeben werden

Versuchen Sie, diese

def g(line): 
    # Note that value of dict is only the name of the function. 
    my_dict = { 
     '1': a, 
     '2': b 
     ... 
    } 

    # Assuming line[0] is 1,2,3, etc. Check if corresponding function exists in map_dict 
    # Convert line[0] to string before passing it in dict.get() method 
    call_func = my_dict.get(str(line[0]), None) 
    if call_func is not None: 
     call_func(line) 
+0

p ist ein Objekt von einem anderen Ort aufgerufen. line2 = ['I', 'PO BOX 28082', 'VISION'] a_map = {'I': "id", "S": "sn", "4": "kommerziell",} setattr (p, a_map [line2 [1]], line2 [2]) Ich bin in der Ausführung dieses Codes erfolgreich. Aber wie soll ich sagen, wenn line2 [0] == 'I': p.id = line2 [1] p.address = line2 [1]. # nicht Teil der Karte p.status = line2 [2] # nicht Teil der Karte. Wie Sie sehen, kann ich es nicht in der Karte zuweisen, da es nicht Teil der Karte ist. Bitte erläutern Sie dies möglichst anhand eines Beispiels. Danke - –

+0

Tut mir leid, ich habe nicht verstanden 'Aber wie soll ich sagen sagen, wenn line2 [0] == 'I': p.id = line2 [1] p.address = line2 [1]. # nicht Teil der Karte p.status = line2 [2] # nicht Teil der Karte. Wie Sie sehen, kann ich es nicht zuordnen, da es nicht Teil der Karte ist. Können Sie Ihre Frage mit weiteren Details bearbeiten? –

+0

Ich habe die Hauptfrage bearbeitet. Lass es mich wissen, wenn es mir auch nicht klar ist. Danke –

1

Sie haben die richtige Idee, aber Sie sind etwas falsch - Sie sollten ein Funktionsobjekt übergeben, anstatt es aufzurufen.

def g(line): 
    my_map = {'1': a, '2': b, '3': c ... } 
    cur_func = my_map.get(line) 
    if cur_func is not None: 
     cur_func(line) 
    else: 
     #No mapping found .. 
+0

p ist ein Objekt, das von einem anderen Ort aufgerufen wird. line2 = [ 'I', 'PO BOX 28082', 'VISION'] a_map = { 'I': "empolyer_id", 'S': "sn", '4': "commercial" , } setattr (p, a_map [Zeile2 [1]], Zeile2 [2]) Ich bin in der Ausführung dieses Codes. Aber wie werde ich sagen, wenn line2 [0] == 'I' –

+0

p ist ein Objekt von einem anderen Ort aufgerufen. line2 = [ 'I', 'PO BOX 28082', 'VISION'] a_map = { 'I': "id", 'S': "sn", '4': "commercial" , } setattr (p, a_map [Zeile2 [1]], Zeile2 [2]) Ich bin in der Ausführung dieses Codes. Aber wie soll ich sagen zuweisen wenn line2 [0] == 'I': p.id = line2 [1] p.address = line2 [1]. # nicht Teil der Karte p.status = line2 [2] # nicht Bestandteil der Karte. Wie Sie sehen, kann ich es nicht in der Karte zuweisen, da es nicht Teil der Karte ist. Bitte erläutern Sie dies möglichst anhand eines Beispiels. Danke –