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

Code: Alles auswählen

def p(data):
    print ('<p>'+data+'<\p>')
 
p('hallo')   
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:

Code: Alles auswählen

<p>I &lt;3 Python &amp; HTML</p>

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