922 Stimmen

Was bedeutet -> in Python-Funktionsdefinitionen?

Kürzlich habe ich etwas Interessantes bemerkt, als ich mir Python 3.3 Grammatik-Spezifikation :

funcdef: 'def' NAME parameters ['->' test] ':' suite

Der optionale "arrow"-Block fehlte in Python 2, und ich konnte keine Informationen über seine Bedeutung in Python 3 finden. Es stellte sich heraus, dass dies korrektes Python ist und vom Interpreter akzeptiert wird:

def f(x) -> 123:
    return x

Ich dachte, dass dies eine Art Vorbedingungssyntax sein könnte, aber:

  • Ich kann nicht testen x da sie noch nicht definiert ist,
  • Egal, was ich nach dem Pfeil einfüge (z. B. 2 < 1 ), hat dies keine Auswirkungen auf das Verhalten der Funktion.

Könnte jemand, der mit diesem Syntaxstil vertraut ist, ihn erklären?

10voto

maz Punkte 101
def f(x) -> 123:
    return x

Meine Zusammenfassung:

  1. 単に -> wird eingeführt, damit Entwickler optional den Rückgabetyp der Funktion angeben können. Siehe Vorschlag für Python-Erweiterung 3107

  2. Dies ist ein Hinweis darauf, wie sich die Dinge in Zukunft entwickeln könnten, wenn Python in großem Umfang eingesetzt wird - ein Hinweis auf starke Typisierung - dies ist meine persönliche Beobachtung.

  3. Sie können auch Typen für Argumente angeben. Die Angabe des Rückgabetyps von Funktionen und Argumenten hilft bei der Reduzierung logischer Fehler und der Verbesserung von Code.

  4. Sie können Ausdrücke als Rückgabetyp haben (sowohl auf Funktions- als auch auf Parameterebene) und auf das Ergebnis der Ausdrücke kann über Anmerkungen Attribut des Objekts "return". Anmerkungen wird für den Ausdruck/Rückgabewert für Lambda-Inline-Funktionen leer sein.

9voto

everyt4u Punkte 131
def f(x) -> str:
return x+4

print(f(45))

Wird das Ergebnis geben: 49 .

Oder mit anderen Worten: '-> str' hat KEINE Auswirkung auf den Rückgabetyp:

print(f(45).__class__)

<class 'int'>

8voto

Mike D3ViD Tyson Punkte 1402

def function(arg)->123:

Es ist einfach ein Rückgabetyp, Ganzzahl In diesem Fall spielt es keine Rolle, welche Zahl Sie schreiben.

wie Java :

public int function(int args){...}

Aber für Python (wie Jim Fasarakis Hilliard sagte) der Rückgabetyp ist nur ein Hinweis Es wird also eine Rückgabe vorgeschlagen, die aber auch andere Typen wie z.B. einen String zurückgeben kann.

7voto

vignesh Punkte 79

-> wird in Python3 eingeführt.

Einfacher ausgedrückt, der Inhalt nach der -> bezeichnet den Rückgabetyp der Funktion. Der Rückgabetyp ist optional.

4voto

Krunal Akbari Punkte 251

Er sagt dem Benutzer nur, was er erwartet, oder gibt den Wert

funcname.__annotations__ wird die Details drucken

wie

def function(name:str ,age:int) -> "printing the personal details ":
    print(f"name is {name} age is {age}")

function("test",20)
print(function.__annotations__)

Der Ausgang

name is test age is 20
{'name': <class 'str'>, 'age': <class 'int'>, 'return': 'printing the personal details '}

selbst wenn Sie die Werte zurückgeben, wird nichts angezeigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X