Guten Morgen,
ich suche eine einfache Liste der Befehls Syntax. Da ich 30 Jahre Programmierer war, ist mir schon klar, was ich tun will, aber da ich mit Python gerade angefangen habe, wie mach ich es?
Zum Beispiel
def fkt(p1,p2) -> Klasse
Wofür steht der Zusatz ->Klasse?
Ich hab schon länger im Internet gesucht , aber nix passendes gefunden.
Vielen Dank für Eure Vorschläge!
Syntax Übersicht
- pillmuncher
- User
- Beiträge: 1490
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Das bedeutet, dass fkt die zwei Aurgumente p1 und p2 erwartet und ein Objekt vom Typ Klasse als Ergebnis zurückliefert. Das Konstrukt "-> T" ist eine Typ-Annotation, die keinerlei Einfluss auf das Programm hat. Sowas benutzt man zur Dokumentation oder wenn man ein externes Programm zur Typ-Prüfung drüberlaufen lässt, etwa mypy.
In specifications, Murphy's Law supersedes Ohm's.
- __blackjack__
- User
- Beiträge: 13277
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Axel58: Nicht irgendwo im Internet suchen, sondern in der Dokumentation. Wenn man dort "->" in die Suche eingibt, kommt man zu zwei Suchtreffern: dem Abschnitt „Function Annotations“ im Tutorial, und der entsprechenden Stelle im Abschnitt „Function definitions“ in der Sprachreferenz.
Das Tutorial in der Python-Dokumentation sollte man mal durchgearbeitet haben.
Eine einfache Liste der Befehlssyntax geht nicht mehr wirklich. Die Sprache ist mittlerweile ganz schön komplex geworden.
Das Tutorial in der Python-Dokumentation sollte man mal durchgearbeitet haben.
Eine einfache Liste der Befehlssyntax geht nicht mehr wirklich. Die Sprache ist mittlerweile ganz schön komplex geworden.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
- DeaD_EyE
- User
- Beiträge: 1038
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Mich wachsender Größe des Programms kann das sinnvoll sein, vor allem dann, wenn es über mehrere Module verteilt ist.pillmuncher hat geschrieben: ↑Sonntag 26. Mai 2024, 17:39 Sowas benutzt man zur Dokumentation oder wenn man ein externes Programm zur Typ-Prüfung drüberlaufen lässt, etwa mypy.
Wenn man es falsch einsetzt, kann es sogar kontraproduktiv sein und zu falschen Annahmen führen.
Anfängern würde ich auch erstmal davon abraten. TypeHints sind eine Wissenschaft für sich.
Für jede Sprache gibt es Cheat-Sheets: https://www.google.com/search?q=python+cheat+sheet
Erster Treffer: https://www.pythoncheatsheet.org/
Definition des Syntax von Python: https://docs.python.org/3/reference/index.html
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
- __blackjack__
- User
- Beiträge: 13277
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Typ-Annotationen haben mich gerade wieder total ”begeistert” als das an einer Zeile wie ``answer: Number = 42`` gescheitert ist, weil 42 keinen passenden Typ für `numbers.Number` hat. Und wie lange das bekannt ist. Und wie schlecht das in der Dokumentation kommuniziert wird, dass der `numbers`-Stack sich nicht für Typ-Annotationen eignet. Und das jeder der darüber stolpert sich seine eigenen Notlösungen bastelt. Oder an der Stelle aufgibt das sinnvoll, nicht unnötig einschränkend zu annotieren.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
- DeaD_EyE
- User
- Beiträge: 1038
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Ich hätte einfach int verwendet, wenn ein int erwartet wird. Falls man numbers.Number nutzt, wirft mypy folgende Fehlermeldung:__blackjack__ hat geschrieben: ↑Donnerstag 30. Mai 2024, 12:08 Typ-Annotationen haben mich gerade wieder total ”begeistert” als das an einer Zeile wie ``answer: Number = 42`` gescheitert ist, weil 42 keinen
passenden Typ für `numbers.Number` hat.
Code geändert und dann kommt die Fehlermeldung nicht mehr.x.py:10: error: Argument 1 to "foo" has incompatible type "int"; expected "Number" [arg-type]
x.py:10: note: Types from "numbers" aren't supported for static type checking
x.py:10: note: See https://peps.python.org/pep-0484/#the-numeric-tower
x.py:10: note: Consider using a protocol instead, such as typing.SupportsFloat
Found 1 error in 1 file (checked 1 source file)
Ich bin schon so oft über TypeHints gestolpert, dass es mich wundert, wenn mal keine Fehlermeldung kommt.
Ich habe die gesammte Doku bestimmt 3 mal durchgelesen. Wenn man am Flughafen im Transit festhängt, hat man Zeit ohne Ende. Vorteilhaft ist auch, dass man lernt mit der Dokumentation umzugehen. Pros können die Links aus dem Kopf im Browser richtig eingeben.
Test: https://docs.python.org/3/library/os.html
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
- __blackjack__
- User
- Beiträge: 13277
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@DeaD_EyE: Es wird ja kein `int` erwartet, dann hätte ich das ja *gar nicht* annotieren müssen, weil ich und `mypy` bei 42 `int` auch schon so annehmen. Es sollt halt mit Zahlen allgemein funktionieren, weil die Implementierung das tut.
`SupportsFloat` ist kein Typ sondern ein Protokoll. Das einzige was Objekte dafür erfüllen müssen, ist eine `__float__()`-Methode implementieren. Das war es dann auch schon. Demnach sind Werte vom Typ `complex` hier nicht möglich. Eine `__float__()`-Methode sagt aber nicht, dass man eine Zahl vor sich hat, sondern etwas, dass sich in eine (Gleitkomma)Zahl umwandeln lässt. Klar trifft das auf die meisten Typen zu die Zahlen implementieren, aber das kann auch auf andere Typen zutreffen die sich so überhaupt nicht wie Zahlen verhalten müssen, aber halt eine Methode haben um sie in eine Zahl umwandeln zu können.
Das ``issubclass(int, Number)`` und ``isinstance(42, Number)`` wahr sind, aber ``answer: Number = 42`` nicht von einem Typchecker akzeptiert wird, ist eine ziemlich bekloppte Situation. Vor 7 Jahren wurde das als Issue bei mypy eröffnet. Letztes Jahr wurde dann die Meldung eingebaut, und das Issue damit als erledigt geschlossen. Wer das irgendwie braucht soll sich doch bitte selber ein passendes Protokoll definieren und dagegen testen.
`SupportsFloat` ist kein Typ sondern ein Protokoll. Das einzige was Objekte dafür erfüllen müssen, ist eine `__float__()`-Methode implementieren. Das war es dann auch schon. Demnach sind Werte vom Typ `complex` hier nicht möglich. Eine `__float__()`-Methode sagt aber nicht, dass man eine Zahl vor sich hat, sondern etwas, dass sich in eine (Gleitkomma)Zahl umwandeln lässt. Klar trifft das auf die meisten Typen zu die Zahlen implementieren, aber das kann auch auf andere Typen zutreffen die sich so überhaupt nicht wie Zahlen verhalten müssen, aber halt eine Methode haben um sie in eine Zahl umwandeln zu können.
Das ``issubclass(int, Number)`` und ``isinstance(42, Number)`` wahr sind, aber ``answer: Number = 42`` nicht von einem Typchecker akzeptiert wird, ist eine ziemlich bekloppte Situation. Vor 7 Jahren wurde das als Issue bei mypy eröffnet. Letztes Jahr wurde dann die Meldung eingebaut, und das Issue damit als erledigt geschlossen. Wer das irgendwie braucht soll sich doch bitte selber ein passendes Protokoll definieren und dagegen testen.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Numba erzeugt statisch typisierten Code ganz ohne Typannotation. Und C++ hat mit Templates dynamische Typisierung und per auto findet der Compiler in den meisten Fällen den Typ selbst raus.
Aber Pythonprogrammierer sollten Typen selbst festlegen, machen es in den meisten Fällen falsch, so dass ein dummer Typechecker ungerechtfertigte Fehlermeldung wirft, und man die meiste Zeit damit verbringen muss, work-arounds zu schaffen.
Statt also Zeit in Typannotation zu stecken, wäre es besser, diese in einen intelligenteren Typechecker zu investieren.
Aber Pythonprogrammierer sollten Typen selbst festlegen, machen es in den meisten Fällen falsch, so dass ein dummer Typechecker ungerechtfertigte Fehlermeldung wirft, und man die meiste Zeit damit verbringen muss, work-arounds zu schaffen.
Statt also Zeit in Typannotation zu stecken, wäre es besser, diese in einen intelligenteren Typechecker zu investieren.