Wie Sie wissen, die Funktion Rückgabe-Typ und die argument-Typen?
Während ich bin mir bewusst, das duck-typing Konzept von Python, habe ich manchmal etwas Mühe mit der Art der Argumente der Funktionen oder der Typ des Rückgabewerts der Funktion.
Nun, wenn ich schrieb, die Funktion selber, ich kenne den Typen. Aber was, wenn jemand nutzen will und rufe meine Funktionen an, wie ist er/Sie erwartet, dass Sie die Typen?
Ich gewöhnlich geben Sie Informationen in die Funktion den docstring (wie: "...the id argument should be an integer..."
und "... the function will return a (string, [integer]) tuple."
)
Aber sucht die Informationen in den docstring (und man es dort als Programmierer) wirklich, wie es gemacht werden soll?
Edit: Während die meisten Antworten scheinen direkt in Richtung "ja, Dokument!" Ich glaube, das ist nicht immer sehr einfach für den "komplexen" Typen.
Zum Beispiel: wie beschreiben prägnant in einem docstring, der eine Funktion liefert eine Liste von Tupeln, wobei jedes Tupel der form (node_id, Knotenname, uptime_minutes) und die Elemente sind jeweils in einen string -, string-und integer?
Der docstring PEP, die Dokumentation gibt keine Richtlinien auf.
Ich denke, das Gegenargument wird sein, dass in diesem Fall Klassen verwendet werden sollten, aber ich finde python sehr flexibel, da es erlaubt die übergabe um diese Dinge mit Listen und Tupeln, d.h. ohne Klassen.
- Die kurze Antwort ist "ja". Die lange Antwort ist "ja, natürlich". Ich weiß nicht, ob Sie sich angeschaut haben viel Python-code, aber man sollte wohl update die Frage, um anzugeben, welche Pakete Sie tatsächlich nutzen, so können wir Sie direkt zu code können Sie Lesen, um zu sehen, wie Dinge getan werden in der library-code, den Sie eigentlich gerade benutzen.
- Ich bin derzeit am kämpfen mit dem mechanize-Paket, aber ich denke, es ist nur (leider) schlecht dokumentiert.
- Python ist cool, da kann man eine Menge Quellcode schreiben schnell und Sie müssen nicht sorgen zu machen über ganz Banale Dinge wie return-Typen, argument-Typen, Laufzeit, Leistung, Menschen, verwenden und pflegen Sie Ihre spaghetti-code für die nächsten 10 Jahre, etc.. Seufz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, die Dinge haben sich ein wenig etwas geändert seit 2011! Jetzt gibt es geben Sie Hinweise in Python 3.5 die Sie verwenden können, zu kommentieren, Argumente und return-Typ der Funktion. Zum Beispiel diese:
kann nun geschrieben werden als dieser:
Wie können Sie nun sehen, Typen, die irgendeine Art von optionalen statische Typ-Prüfung, die Ihnen und Ihrem Typ-checker untersuchen Ihren code.
weitere Erklärung, die ich vorschlagen, einen Blick auf die blog-post-Typ-Hinweise in PyCharm blog.
Dies ist, wie dynamische Sprachen arbeiten. Es ist nicht immer eine gute Sache, obwohl, vor allem, wenn die Dokumentation schlecht ist - jemand versucht, auf eine schlecht dokumentierte python-framework? Manchmal müssen Sie zurückkehren, um das Lesen der Quelle.
Hier sind einige Strategien, um Probleme zu vermeiden mit duck typing:
Auch einer der wichtigsten Punkte:
Sollte es nur ein paar gut definiert und dokumentiert Typen werden herumgereicht. Alles andere sollte offensichtlich sein, indem Sie sich den code: nicht komisch parameter-Typen kommen von weit Weg, dass Sie nicht herausfinden können, durch suchen in der Nähe von dem code...
Verwandte, (und auch mit docstrings), es ist eine Technik, die in python aufgerufen
doctests
. Verwenden Sie, dass zu dokumentieren, wie Sie Ihre Methoden sind zu erwarten - und haben schöne unit-test-Abdeckung in der gleichen Zeit!Ja, solltest du docstrings verwenden, um Ihre Klassen und Funktionen, die mehr freundlich zu anderen Programmierern:
Mehr: http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring
Einige Editoren erlauben Ihnen, zu sehen, docstrings während der Eingabe, so ist es wirklich die Arbeit erleichtert.
Besuchte ich die coursera-Kurs, es war die Lektion, in der wir unterrichtet wurden, über design-Rezept.
Unten docstring format fand ich sehr nützlich.
Ich denke, wenn docstrings geschrieben sind, in dieser Weise, könnte es helfen, eine Menge an Entwickler.
Link zum video [Tun Sie das video zu sehen] : https://www.youtube.com/watch?v=QAPg6Vb_LgI
Ja, es ist.
In Python eine Funktion nicht immer haben, um eine variable des gleichen Typs (obwohl dein code wird besser lesbar, wenn Sie Ihre Funktionen immer wieder den gleichen Typ). Das bedeutet, dass Sie können nicht geben Sie einen einzigen return-Typ der Funktion.
In der gleichen Weise, die Parameter nicht immer die gleichen zu geben.
Ja, da es ein dynamisch geben Sie die Sprache 😉
Lesen dieser Referenz: PEP 257
Ähm... Es gibt keine "knappe" Beschreibung dazu. Es ist Komplex. Sie haben entwickelt, um es zu Komplex sein. Und es erfordert eine umfangreiche Dokumentation, in der docstring.
Sorry, aber die Komplexität ist -- gut -- Komplex.
Docstrings (und Dokumentation im Allgemeinen). Python 3 bietet (optional) Funktion Anmerkungen, wie beschrieben in PEP 3107 (aber nicht weglassen, docstrings)
Habe ich in Python eine Menge, so ist es nicht nur eine seichte Antwort; Bitte verwenden Sie eine statisch typisierte Sprache wie Go oder Maschinenschrift für die Produktion verwenden. Es ist ein coding horror zu versuchen, herauszufinden, Typen in leicht komplexe Anwendungen mit dynamisch typisierten Sprachen