2017-09-30 1 views
1

Ich arbeite an einer Funktion, um die Informationen aus der Datenbank zu bekommen, damit ich die Rückgabewerte erhalten kann. Ich versuche herauszufinden, wie man jeden Wert aus der UpdateEPG Funktion zu einem Zeitpunkt erhält.Wie bekomme ich die Rückgabewerte von einer Funktion?

Wenn ich versuche dies:

def UpdateEpg(self, program_title = '', program_start = '', program_stop = ''): 
    conn = database.connect(self.profilePath) 
    cur = conn.cursor() 
    cur.execute("SELECT title, start_date, stop_date FROM programs where channel=? LIMIT 2", [channel]) 
     program = cur.fetchall() 

    for ind, row in enumerate(program): 
     program_title = row[0] 
     program_start_date = str(row[1]) 
     program_stop_date = str(row[2]) 


    return program_title, program_start_date, program_stop_date 


self.UpdateEpg() 
print self.UpdateEPG(program_title) 
print self.UpdateEPG(program_start_date) 
print self.UpdateEPG(program_stop_date)   

Es lässt mich nicht den einzigen Wert von UpdateEpg bekommen. Ich möchte den einzelnen Wert erhalten, so dass ich in das Objekt eingeben konnte, um das Label festzulegen. Können Sie mir ein Beispiel zeigen, wie ich program_title, program_start_date und program_stop_date für jede Variable bekommen konnte, um Zugriff auf UpdateEpg zu erhalten, um die gesuchte Information zu bekommen?

+2

Die Methode gibt ein Tupel mit drei Elementen zurück. Sie können einfach in den Rückgabewert indexieren, z. '[0]', '[1]', '[2]'. –

+0

Danke, wenn ich das versuche: 'program_title = self.UpdateEPG (0)' es wird mir einen Fehler geben 'AttributError:' MyPlayer 'Objekt hat kein Attribut' UpdateEPG''. Irgendeine Idee? –

+0

Sie müssten mehr von Ihrem Code zeigen. Es sieht so aus, als ob "UpdateEpg" eine Klassenmethode sein soll, und der Code, der es aufruft, sieht so aus, als ob es Teil einer anderen Methode derselben Klasse sein soll. Wenn das nicht der Fall ist, wird es wahrscheinlich nicht funktionieren. Aber Sie müssen einen vollständigeren Code-Auszug veröffentlichen, bevor wir wirklich sehen können, was Sie tun. –

Antwort

1

Der Zugriff auf mehrere Werte ähnelt der Rückgabe mehrerer Werte. setzen die Namen nur auf der linken Seite von =

program_title, program_start_date, program_stop_date = self.UpdateEpg() 
print program_title 
print program_start_date 
print program_stop_date 
+0

Danke, das ist die Antwort, die ich suche. Problem sind jetzt gelöst! –

1

Da Ihre Methode ein Tupel zurückgibt, können Sie mithilfe der Indizierung den gewünschten Wert ermitteln.

my_tuple = self.UpdateEpg() 
print my_tuple[0] # Prints program_title 
print my_tuple[1] # Prints program_start_date 
print my_tuple[2] # Prints program_stop_date 

Natürlich können Sie das Tupel verwenden und drucken, wie Sie möchten. Beachten Sie, dass Sie innerhalb der von Ihnen angegebenen Klasse self.UpdateEpg() aufrufen müssen.

+0

Danke dafür, aber wie kann ich drei Variablen 'program_title',' program_start_date' und 'program_stop_date' verwenden, um auf das self.UpdateEpg zuzugreifen? –

+0

Was meinst du mit "Zugang"? – Cuber

+0

Ich möchte etwas wie 'program_title = self.UpdateEpg [0]' verwenden, aber es lässt mich nicht, da es mir einen Fehler gibt AttributeError: 'MyPlayer' Objekt hat kein Attribut 'UpdateEPG' –

0

Sieht aus wie Sie Python neu sind. Und zur Programmierung im Allgemeinen. Das ist in keiner Weise schlecht; selbst die Besten von uns müssen irgendwo anfangen. Hier sind einige Tipps von jemandem, der Python benutzt, seit er 12 war. (Okay, das sind nur drei Jahre oder so, aber immer noch ...)

Erstens würde ich stark empfehlen mit Python 3 anstatt Python 2 wenn Sie kann es helfen. Python 2 ist seit vier Jahren veraltet, und dieses Programm wird auf Python 3 mit wenig bis keiner Modifikation funktionieren.

Zweitens ist in Python alles pass-by-value. Zuweisen einer Variablen in einer Funktion übergeben wird außerhalb der Funktion nicht, dass Wert der Variablen ändern, zB:

>>> def myfunc(a): 
...  a=2 
... 
>>> a = 1 
>>> myfunc(a) 
>>> print(a) 
1 
>>> 

(Beachten Sie, dass bei der interaktiven Eingabeaufforderung, die meisten Anrufe print() unnötigen sind einfach im Namen einer Variablen eingeben. (oder ein Ausdruck wie 1+1 oder someFunction()) wird seinen Wert drucken.)

Die Ausnahme zu dieser Regel ist, dass einige Objekte (wie Listen) veränderbar sind. Ihr Inhalt (aber nicht die Listen selbst) aus innerhalb einer Funktion geändert werden:

>>> def myfunc2(l): 
...  l[0] = 2 
... 
>>> mylist = [1, 2, 3] 
>>> myfunc2(mylist) 
>>> mylist 
[2, 2, 3] 
>>> 

Beachten Sie, dass die myfunc Funktion die Liste selbst nicht ändern, es verändert nur einen Wert in der Liste.

Saiten fallen nicht in diese Kategorie. In Python sind Zeichenfolgen unveränderlich. Sobald ihre Inhalte festgelegt sind, können sie nicht geändert werden. Die einzige Möglichkeit, den Wert einer Zeichenfolge zu ändern, besteht darin, der Variablen einen neuen Wert zuzuweisen, sodass sie den alten Wert vergessen lässt. In Python können Funktionen mehrere Werte als Tupel zurückgeben, das wie eine Liste ist, aber Klammern (die optional sind und weggelassen werden können) anstelle von eckigen Klammern, und ihr Inhalt kann nicht geändert werden (Aufruf von myfunc2) von oben auf ein Tupel würde einen Fehler verursachen).Ein weiteres praktisches Feature ist Tupel Auspacken (die auch auf den Listen funktioniert und jede andere Art von Sequenz) wie folgt:

>>> mytuple = (1, 2, 3) 
>>> mytuple 
(1, 2, 3) 
>>> a, b, c = mytuple 
>>> a 
1 
>>> b 
2 
>>> c 
3 
>>> 

Hier ist eine Version von UpdateEpg() ist, dass diese Dinge berücksichtigt:

def UpdateEpg(self): 
    conn = database.connect(self.profilePath) 
    cur = conn.cursor() 
    cur.execute("SELECT title, start_date, stop_date FROM programs where channel=? LIMIT 2", [channel]) 
    row = cur.fetchone() 

    program_title = row[0] 
    program_start_date = str(row[1]) 
    program_stop_date = str(row[2]) 


    return program_title, program_start_date, program_stop_date 


program_title, program_start, program_finish = self.UpdateEpg() 

Sorry über die Wand des Textes, aber ich möchte sicherstellen, dass die Leute verstehen, was ihr Programm tut, bevor sie einfach Code von StackOverflow kopieren und einfügen.

Verwandte Themen