Seite 1 von 1
Funktion und Rückgabe
Verfasst: Mittwoch 21. Oktober 2020, 08:39
von Wodan
Hallo liebe community ich habe eine Frage bezüglich des folgenden Codes
Code: Alles auswählen
def p(data):
return ('<p>'+data+'<\p>')
print(p('hallo'))
Oder so
Welcher der beiden funktion ist performance technisch besser oder welches wäre die richtige weisse eine Funktion zu schreiben und aufzurufen
Wo sind die vor und Nachteile
Re: Funktion und Rückgabe
Verfasst: Mittwoch 21. Oktober 2020, 09:01
von sparrow
Von der Performance her macht es keinen Unterschied.
Welches von beiden Vorgehen richtig ist, hängt davon ab, was die Funktion machen soll. Sie tut ja nicht das selbe.
Die eine Funktion packt eine Zeichenkette in Tags und gibt das Ergebnis zurück.
Die andere packt eine Zeichenkette in Tags, gibt sie in via print aus und None zurück. Sie sollte auch besser print_with_ptags(data) heißen, damit sie die Tätigkeit beschreibt.
Welche von beiden richtig ist, hängt vom Anwendungsfall ab.
Re: Funktion und Rückgabe
Verfasst: Mittwoch 21. Oktober 2020, 09:05
von __deets__
Ich würde weiter gehen, und sagen, dass die erste Variante richtiger ist. Wenn man die Wahl hat zwischen einer Funktion, die nur eine Sache macht und das Ergebnis zurück gibt, oder einer, die mehrere Sachen macht, in diesem Fall auch ausgeben, nimmt man die mit weniger Umfang. Denn vielleicht will man die ausgabe mal in in eine Datei machen, oder in einen socket, oder gar nicht. All diese Wahlmöglichkeiten hat man nicht mehr, wenn das schon da drin passiert. Oder man muss mehr Parameter einführen.
Re: Funktion und Rückgabe
Verfasst: Mittwoch 21. Oktober 2020, 09:09
von Sirius3
Beide Funktionen sind schlecht. Strings setzt man nicht per + zusammen, sondern benutzt format-Strings. Dann sollte man klären, was `data` ist. Normaler Text muß bei HTML richtig codiert werden. Das tust Du nicht.
Die Klammern bei `return` sind überflüssig.
Funktionen sollten nichts per `print` ausgeben, weil man dann mit dem Ergebnis nichts anderes anfangen kann, als es ausgeben.
Performance spielt normalerweise gar keine Rolle.
Re: Funktion und Rückgabe
Verfasst: Mittwoch 21. Oktober 2020, 12:48
von __blackjack__
Also beispielsweise so:
Code: Alles auswählen
#!/usr/bin/env python3
from markupsafe import Markup
def wrap_in_paragraph(content):
return Markup("<p>{}</p>").format(content)
def main():
print(wrap_in_paragraph("I <3 Python & HTML"))
if __name__ == "__main__":
main()
Ausgabe:
Re: Funktion und Rückgabe
Verfasst: Mittwoch 21. Oktober 2020, 13:11
von snafu
Oder halt mit Bordmitteln:
Code: Alles auswählen
import html
def get_paragraph(text):
escaped = html.escape(text)
return f"<p>{escaped}</p>"
print(get_paragraph("I <3 Python & HTML"))
Sofern HTML-Code im größeren Stil generiert werden soll, ist eine Template-Engine (z.B. Jinja2) aber meist besser geeignet.
Re: Funktion und Rückgabe
Verfasst: Mittwoch 21. Oktober 2020, 14:02
von Wodan
Vielen Dank für die vielen Antworten
Ja es sollen nur strings ausgegeben werden.
Ich werde mal die Art und weise von snafu als erstes ausprobieren