Seite 1 von 1
Funktion mit Rückgabewert
Verfasst: Donnerstag 9. Juni 2022, 23:37
von PeterL
Hallo Leute,
ich komme nicht weiter.
Google kann nicht helfen.
Ich habe eine Funktion mit Rückgabewert geschrieben.
Ich übergebe eine Stringvariable, und möchte die Länge in Byte ermitteln.
Soweit geht auch alles. Ich schaffe es einfach nicht die ermittelten Bytes zurückzugeben.
Code: Alles auswählen
def längeecocode(eco):
x=(len(eco))
x=round(x /1000000,2)
return x
In x steht die Länge in Byte
Als Ausgabe erhalte ich: <function längeecocode at 0x0335F270>
Danke...
Re: Funktion mit Rückgabewert
Verfasst: Donnerstag 9. Juni 2022, 23:52
von pillmuncher
Du hast die Klammern an der falschen Stelle. Statt um (len(eco)) sollten sie beim Aufruf von längeecocode stehen. Also len(eco) und längeecocode("...").
Re: Funktion mit Rückgabewert
Verfasst: Donnerstag 9. Juni 2022, 23:57
von PeterL
pillmuncher hat geschrieben: Donnerstag 9. Juni 2022, 23:52
Du hast die Klammern an der falschen Stelle. Statt um (len(eco)) sollten sie beim Aufruf von längeecocode stehen. Also len(eco) und längeecocode("...").
Hallo,
da kommt das gleiche raus. Ich erhalte als Rückgabewert: <function längeecocode at 0x03EAF270>
Bis dann...
Re: Funktion mit Rückgabewert
Verfasst: Freitag 10. Juni 2022, 00:40
von pillmuncher
@PeterL: Dann solltest du vielleicht den Code posten, der den Aufruf deiner Funktion zeigt, nicht nur deren Definition.
Außerdem könnte es sein, dass du versehentlich sowas programmiert hast:
Code: Alles auswählen
def längeecocode(eco):
x=len(eco)
x=round(x /1000000,2)
return längeecocode # <======================
Das könnte dein Ergebnis erklären.
Re: Funktion mit Rückgabewert
Verfasst: Freitag 10. Juni 2022, 01:36
von __blackjack__
@PeterL: Die Länge in Bytes bekommst Du so nicht heraus. Also mal davon abgesehen, das durch 1 Million teilen dabei so überhaupt nicht sinnvoll ist, und man `round()` nur verwenden sollte wenn man tatsächlich mit so einem gerundeten Wert weiterrechnen will, liefert `len()` auf Zeichenketten die Anzahl der Codepoints. Wie viele Bytes das sind kommmt auf die Kodierung an. Was willst Du denn eigentlich wissen? Also wozu denkst Du die Länge in Bytes zu benötigen?
`längeecocode()` ist kein guter Name. Es ist schwer zu lesenwennmanWortesoeinfachohneLeerzeichenaneinanderklebt. Also `laenge_eco_code()` wäre leichter zu lesen. Das beschreibt aber keine Tätigkeit, was Funktions (und Methodennamen) in der Regel aber tun, damit man sie leichter von eher passiven Werten unterscheiden kann.
`berechne_eco_code_laenge()` wäre da eventuell ein passender Name.
Re: Funktion mit Rückgabewert
Verfasst: Freitag 10. Juni 2022, 01:45
von PeterL
pillmuncher hat geschrieben: Freitag 10. Juni 2022, 00:40
@PeterL: Dann solltest du vielleicht den Code posten, der den Aufruf deiner Funktion zeigt, nicht nur deren Definition.
Außerdem könnte es sein, dass du versehentlich sowas programmiert hast:
Code: Alles auswählen
def längeecocode(eco):
x=len(eco)
x=round(x /1000000,2)
return längeecocode # <======================
Das könnte dein Ergebnis erklären.
Hallo,
leider kommt das selbe Ergebnis raus.
ich erstelle eine Variable so: eco = eco + ecocode in ecocode steht irgendwas ,es ist eine Stringvariable. Alles soll in einer Variable abgelegt werden in eco.
Wenn ich die Len Funktion innerhalb einer def benutze geht alles. Mit Return aus einer def geht es nicht. Mit Print kann ich ohne Rückgabefunktion aus einer def mir das Ergebnis anzeigen lassen. Irgendwie kann Return nichts zurückgeben.
Bis dann...
Re: Funktion mit Rückgabewert
Verfasst: Freitag 10. Juni 2022, 02:16
von pillmuncher
@PeterL:
Es heißt nicht "eine def", sondern "eine Funktion". Funktionen werden mithilfe des def-Keywords definiert.
Nochmal: Zeig, wie du die Funktion längeecocode() aufrufst. Wie soll man helfen, wenn du dich weigerst, den Code zu zeigen?
Re: Funktion mit Rückgabewert
Verfasst: Freitag 10. Juni 2022, 16:15
von DeaD_EyE
PeterL hat geschrieben: Donnerstag 9. Juni 2022, 23:37
Ich übergebe eine Stringvariable, und möchte die Länge in Byte ermitteln.
Die Funktion
len liefert bei
bytes die Anzahl der Bytes zurück und bei
str die Anzahl der Zeichen.
Wenn man wissen will, wie viel Bytes übertragen werden müssen, muss man den
str erst nach
bytes encodieren.
Gleichzeitig muss auch das Encoding festgelegt werden. Mit
utf8 liegt man meistens richtig. Es gibt aber auch Anwendungen, die ein anderes mulbibyte encoding für Unicode erwarten (Datenbanken z.B.).
Code: Alles auswählen
def bytes_len(text):
return len(text.encode("utf8"))
wort = "Überpython"
länge_utf8 = len(wort)
länge_bytes = bytes_len(wort)
print("Anzahl der Zeichen:", länge_utf8)
print("Anzahl der Bytes:", länge_bytes)
Anzahl der Zeichen: 10
Anzahl der Bytes: 11
Das kommt daher, dass bei dem Encoding
utf8 pro Zeichen 8 - 32 Bit encodiert werden können.
Das
Ü benötigt 2 Bytes bei
utf8. Der Buchstabe Ü kommt nicht im ASCII Zeichensatz vor.
Trotzdem mal den Code posten, der deine Funktion aufruft, da das, was du geschrieben hast, nicht zu der Ausgabe passt.
Re: Funktion mit Rückgabewert
Verfasst: Dienstag 14. Juni 2022, 00:54
von PeterL
PeterL hat geschrieben: Donnerstag 9. Juni 2022, 23:37
Ich übergebe eine Stringvariable, und möchte die Länge in Byte ermitteln.
Die Funktion
len liefert bei
bytes die Anzahl der Bytes zurück und bei
str die Anzahl der Zeichen.
Wenn man wissen will, wie viel Bytes übertragen werden müssen, muss man den
str erst nach
bytes encodieren.
Code: Alles auswählen
def bytes_len(text):
return len(text.encode("utf8"))
wort = "Überpython"
länge_utf8 = len(wort)
länge_bytes = bytes_len(wort)
print("Anzahl der Zeichen:", länge_utf8)
print("Anzahl der Bytes:", länge_bytes)
Anzahl der Zeichen: 10
Anzahl der Bytes: 11
Das kommt daher, dass bei dem Encoding
utf8 pro Zeichen 8 - 32 Bit encodiert werden können.
Das
Ü benötigt 2 Bytes bei
utf8. Der Buchstabe Ü kommt nicht im ASCII Zeichensatz vor.
Trotzdem mal den Code posten, der deine Funktion aufruft, da das, was du geschrieben hast, nicht zu der Ausgabe passt.
[/quote]
Hallo,
ich erhalte immer noch die selbe Fehlermeldung: <function längeecocode at 0x03D8F228>
Mein Code:
Code: Alles auswählen
def längeecocode(eco):
return len(eco.encode("utf8"))
eco='A00'
längeecocode(eco)
print (längeecocode)
Bis dann...
Re: Funktion mit Rückgabewert
Verfasst: Dienstag 14. Juni 2022, 02:58
von pillmuncher
@PeterL: Versuch mal zu erklären, was dieser Code macht:
Danach schau dir diesen Code und sein Ergebnis an:
Vergleiche beide. Ist dir der Unterschied klar?
Re: Funktion mit Rückgabewert
Verfasst: Dienstag 14. Juni 2022, 08:34
von DeaD_EyE
ich erhalte immer noch die selbe Fehlermeldung: <function längeecocode at 0x03D8F228>
Du musst auf jeden Fall noch die Basics lernen.
Der Name "ländercode" zeigt auf die erstellte Funktion.
Die Klammern () rufen die Funktion auf und dann wird ein oder mehrere Objekte zurückgeliefert.
Du rufst die Funktion aber nicht auf.
Code: Alles auswählen
def hallo():
return 42
print("Repräsentation der Funktion", hallo)
print("Name der Funktion", hallo.__name__)
print("Rückgabewert", hallo())
print()
bar = hallo
print("Repräsentation der Funktion", bar)
print("Name der Funktion", bar.__name__)
print("Rückgabewert", bar())
Repräsentation der Funktion <function hallo at 0x7f568bb6b250>
Name der Funktion hallo
Rückgabewert 42
Repräsentation der Funktion <function hallo at 0x7f568bb6b250>
Name der Funktion hallo
Rückgabewert 42
Wie man sehen kann, zeigen die Namen "hallo" und "bar" auf dieselbe Funktion (virtuelle Speicheradresse ist gleich).
Das Attribut __name__ wird der Funktion zu Zeitpunkt der Definition zugewiesen.
Erst der Aufruf der Funktion gibt auch einen Rückgabewert zurück.
Was man noch so mit Funktionen machen kann:
Code: Alles auswählen
def hello():
print("Hello World")
def hello_david():
print("Hello David")
functions = [hello, hello_david]
# Auf das erste Element zugreifen (hello) und die Funktion aufrufen mit ()
functions[0]()
# Auf das zweite Element zugreifen (hello) und die Funktion aufrufen mit ()
functions[1]()
Re: Funktion mit Rückgabewert
Verfasst: Donnerstag 16. Juni 2022, 22:10
von PeterL
Hallo Leute,
danke für euere Hilfe.
Ich weis immer noch nicht wo der Fehler liegt.
Ich lasse es damit gut sein, ich programmiere es um.
Danke...
Re: Funktion mit Rückgabewert
Verfasst: Donnerstag 16. Juni 2022, 22:38
von pillmuncher
@PeterL: So schwer ist das wirklich nicht. Deine Funktion hat ein
return-Statement, etwa so:
Wenn du diese Funktion so aufrufst:
dann sagst du damit, dass du mit dem Rückgabewert - der
123 - nichts machen willst. Willst du dagegen diesen Wert verwenden, musst du ihn zB. an einen Namen binden:
Diesen Namen kannst du anschließend verwenden:
Die Ausgabe wäre hier
123.
Was du dagegen gemacht hast, ist sowas:
foo ist ein Funktionsobjekt, dessen String-Repräsentation du ausgibst. Die Ausgabe würde dann zB. so aussehen:
Nochmal im Zusammenhang zum Vergleich:
Code: Alles auswählen
>>> def foo():
... return 123
...
>>> print(foo)
<function foo at 0x7fead9034940>
>>> print(foo())
123
>>> x = foo()
>>> print(x)
123
Ist es jetzt klarer?