Ich lerne, arbeite und spiele seit anderthalb Jahren mit Python. Als Biologe, der sich langsam der Bioinformatik zuwendet, war diese Sprache der Kern aller wichtigen Beiträge, die ich im Labor geleistet habe. Ich habe mich mehr oder weniger in die Art und Weise verliebt, wie Python es mir ermöglicht, schöne Lösungen auszudrücken, und auch in die Semantik der Sprache, die einen so natürlichen Fluss von Gedanken zu praktikablem Code ermöglicht.
Was ich gerne wissen würde, ist Ihre Antwort auf eine Art Frage, die ich in diesem oder anderen Foren selten gesehen habe. Diese Frage scheint mir für jeden von zentraler Bedeutung zu sein, der sich auf dem Weg zur Verbesserung von Python befindet, sich aber fragt, wie seine nächsten Schritte aussehen sollen.
Lassen Sie mich zusammenfassen, was ich NICHT zuerst fragen möchte;)
- Ich möchte nicht wissen, wie man Python SCHNELL lernt
- Ich möchte auch nicht herausfinden, wie ich die Sprache am besten kennenlernen kann
- Schließlich möchte ich keinen "One Trick, der alles macht" -Ansatz kennen.
Was ich über Ihre Meinung wissen möchte, ist:
Was sind die Schritte, die SIE einem Python-Gesellen empfehlen würden, von der Ausbildung bis zum Guru-Status (Sie können jederzeit dort anhalten, wo es Ihr Fachwissen vorschreibt), damit Sie Schritt für Schritt zu einem immer besseren Python-Codierer werden. Einige der Leute auf SO scheinen für ihre Python-Fähigkeiten fast der Anbetung würdig zu sein, bitte klären Sie uns auf :)
Die Art der Antworten, die ich genießen würde (aber die Leserschaft gerne überraschen würde: P), ist mehr oder weniger so formatiert:
- Lesen Sie dies (z. B. Python-Tutorial) und achten Sie auf diese Art von Details
- Code für so viele Zeiten / Probleme / Codezeilen
- Lesen Sie dann dies (z. B. dieses oder jenes Buch), aber achten Sie diesmal darauf
- Bewältigen Sie einige Probleme im wirklichen Leben
- Fahren Sie dann mit Lesen von Y fort.
- Stellen Sie sicher, dass Sie diese Konzepte verstehen
- Code für X-Zeit
- Kommen Sie auf diese und jene Grundlagen zurück oder gehen Sie weiter zu ...
- (Du verstehst, worum es geht :)
Es ist mir wirklich wichtig, Ihre Meinung darüber zu kennen, worauf man in verschiedenen Phasen genau achten sollte, um STÄNDIG voranzukommen (natürlich mit gebührenden Anstrengungen). Wenn Sie aus einem bestimmten Fachgebiet stammen, besprechen Sie den Pfad, den Sie in diesem Bereich für angemessen halten.
EDIT: Dank Ihrer großartigen Beiträge bin ich wieder auf dem Python-Verbesserungspfad! Ich schätze wirklich!
Eine gute Möglichkeit, Ihr Python-Wissen zu erweitern, besteht darin , den Quellcode der Bibliotheken, Plattformen und Frameworks zu durchsuchen, die Sie bereits verwenden.
Wenn Sie beispielsweise eine Site auf Django erstellen, können viele Fragen, die Sie möglicherweise stören, beantwortet werden, indem Sie sich ansehen, wie Django die betreffende Funktion implementiert.
Auf diese Weise lernen Sie weiterhin neue Redewendungen, Codierungsstile und Python-Tricks kennen . (Einige werden gut und andere schlecht sein.)
Und wenn Sie etwas Pythony sehen, das Sie in der Quelle nicht verstehen, gehen Sie zum # Python-IRC-Kanal und Sie werden viele "Sprachanwälte" finden , die Ihnen gerne erklären.
Eine Anhäufung dieser kleinen Klarstellungen über Jahre hinweg führt zu einem viel tieferen Verständnis der Sprache und all ihrer Vor- und Nachteile.
quelle
Verstehen Sie (genauer) die Datentypen von Python und ihre Rollen in Bezug auf die Speicherverwaltung
Wie einige von Ihnen in der Community wissen, unterrichte ich Python-Kurse . Die beliebtesten sind der umfassende Intro + Intermediate-Kurs sowie ein "Fortgeschrittenenkurs", der eine Vielzahl von Bereichen der Anwendungsentwicklung einführt.
Sehr oft wird mir eine ähnliche Frage gestellt: "Soll ich an Ihrem Intro oder Fortgeschrittenenkurs teilnehmen? Ich habe Python bereits seit 1-2 Jahren programmiert, und ich denke, das Intro ist mir zu einfach, also würde ich es tun." springe gerne direkt zum Fortgeschrittenen ... welchen Kurs würdest du empfehlen? "
Um ihre Frage zu beantworten, prüfe ich, wie stark sie in diesem Bereich sind - nicht, dass dies wirklich der beste Weg ist, um zu messen, ob sie für einen fortgeschrittenen Kurs bereit sind, sondern um zu sehen, wie gut ihr Grundwissen über Pythons Objekte und Speichermodell, das eine Ursache für viele Python-Fehler ist, die von Nicht-Anfängern geschrieben wurden, sondern auch von denen, die darüber hinausgegangen sind.
Dazu zeige ich sie auf diese einfache zweiteilige Quizfrage:
Oft sind sie in der Lage, die Ausgabe zu erhalten, aber das Warum ist schwieriger und viel wichtiger für eine Antwort ... Ich würde die Ausgabe als 20% der Antwort abwägen, während das "Warum" 80% Kredit erhält. Wenn sie nicht verstehen können, warum, unabhängig von ihrer Python-Erfahrung, werde ich die Leute immer zum umfassenden Intro + Intermediate-Kurs führen, da ich eine Vorlesung über Objekte und Speicherverwaltung bis zu dem Punkt verbringe, an dem Sie mit dem antworten können sollten Ausgabe und das Warum mit ausreichendem Vertrauen. (Nur weil Sie die Syntax von Python nach 1-2 Jahren kennen, sind Sie erst dann bereit, über ein "Anfänger" -Label hinauszugehen, wenn Sie ein besseres Verständnis dafür haben, wie Python unter dem Deckmantel funktioniert.)
Eine nachfolgende Anfrage, die eine ähnliche Antwort erfordert, ist noch schwieriger, z.
Beispiel 3
Die nächsten Themen, die ich empfehle, sind das Verstehen des Referenzzählens, das Erlernen der Bedeutung von "Internieren" (aber nicht unbedingt das Verwenden), das Erlernen flacher und tiefer Kopien (wie in Beispiel 3 oben) und schließlich die Wechselbeziehungen zwischen den verschiedenen Typen und Konstrukte in der Sprache, dh Listen gegen Tupel, Diktate gegen Mengen, Listenverständnis gegen Generatorausdrücke, Iteratoren gegen Generatoren usw.; Alle diese anderen Vorschläge sind jedoch ein anderer Beitrag für eine andere Zeit. Hoffe das hilft in der Zwischenzeit! :-)
ps. Ich stimme den anderen Antworten zu, um die Selbstbeobachtung zu vertiefen, den Quellcode anderer Projekte zu studieren und beiden Vorschlägen ein starkes "+1" hinzuzufügen!
pps. Gute Frage übrigens. Ich wünschte, ich wäre am Anfang klug genug gewesen, um so etwas zu fragen, aber das ist lange her, und jetzt versuche ich, anderen bei meiner langjährigen Vollzeit-Python-Programmierung zu helfen !!
quelle
print
keine Aussage ist.Lesen Sie den Aufsatz von Peter Norvig über das Werden eines Programmiermeisters in 10 Jahren: http://norvig.com/21-days.html . Ich würde wetten, dass dies für jede Sprache gilt.
quelle
Introspektion verstehen
dir()
Äquivalenttype()
Äquivalentdis
Modul, um zu sehen, wie verschiedene Sprachkonstrukte funktionierenDiese Dinge zu tun wird
quelle
type()
Äquivalent", das wäre sehr schwierig, wenn Sie die vollständige Metaclassy-Spezifikation von nehmen würdentype
!quelle
Ich gebe Ihnen den einfachsten und effektivsten Rat, den Ihnen wohl jeder geben kann: Code .
Sie können eine Sprache nur durch Codierung besser verwenden (was bedeutet, dass Sie sie verstehen) . Sie müssen aktiv Spaß am Codieren haben, sich inspirieren lassen, Fragen stellen und selbst Antworten finden.
Hast du eine Stunde Zeit? Schreiben Sie Code, der eine Zeichenfolge umkehrt, und finden Sie die optimale Lösung heraus. Ein freier Abend? Warum versuchen Sie es nicht mit Web-Scraping? Lesen Sie den Code anderer Leute. Sehen Sie, wie sie Dinge tun. Fragen Sie sich, was Sie tun würden.
Wenn mir an meinem Computer langweilig ist, öffne ich meine IDE und den Code-Storm. Ich schreibe Ideen auf, die interessant und herausfordernd klingen. Ein URL-Shortener? Klar, das kann ich machen. Oh, ich habe gelernt, wie man als Nebeneffekt Zahlen von einer Basis in eine andere umwandelt!
Dies gilt unabhängig von Ihrem Kenntnisstand. Du hörst nie auf zu lernen. Wenn Sie in Ihrer Freizeit aktiv programmieren, werden Sie mit wenig zusätzlichem Aufwand die Sprache verstehen und letztendlich ein Guru. Sie bauen Wissen und wiederverwendbaren Code auf und merken sich Redewendungen.
quelle
Wenn Sie Python für die Wissenschaft verwenden und verwenden (was Sie anscheinend sind), wird ein Teil davon darin bestehen, wissenschaftliche Bibliotheken zu lernen und zu verstehen, für mich wären dies
Für das wissenschaftliche Rechnen ist es wichtig zu wissen, wie man die richtigen Bibliotheken verwendet und Ihren Code vektorisiert.
Ich wollte hinzufügen, dass der Umgang mit großen numerischen Datensätzen auf gängige pythonische Weise (objektorientierte Ansätze, Listen, Iteratoren) äußerst ineffizient sein kann. Beim wissenschaftlichen Rechnen kann es erforderlich sein, Ihren Code so zu strukturieren, dass er sich drastisch von der Herangehensweise der meisten herkömmlichen Python-Codierer an Daten unterscheidet.
quelle
Google hat kürzlich eine Online-Python-Klasse veröffentlicht ("Klasse" wie in "Studiengang").
http://code.google.com/edu/languages/google-python-class/
Ich weiß, dass dies Ihre vollständige Frage nicht beantwortet, aber ich denke, es ist ein großartiger Ort, um anzufangen!
quelle
Laden Sie Twisted herunter und sehen Sie sich den Quellcode an. Sie verwenden einige ziemlich fortgeschrittene Techniken.
quelle
Alle Datentypen und -strukturen gründlich verstehen
Schreiben Sie für jeden Typ und jede Struktur eine Reihe von Demoprogrammen, die jeden Aspekt des Typs oder der Datenstruktur ausführen. Wenn Sie dies tun, kann es sich lohnen, Notizen zu jedem einzelnen zu bloggen ... es könnte für viele Menschen nützlich sein!
quelle
Ich habe Python über einen Sommer zuerst selbst gelernt, indem ich das Tutorial auf der Python-Site gemacht habe (leider kann ich das nicht mehr finden, daher kann ich keinen Link posten).
Später wurde mir Python in einem meiner ersten Studienjahre an der Universität beigebracht. Im folgenden Sommer habe ich mit PythonChallenge und mit Problemen von Google Code Jam geübt . Das Lösen dieser Probleme hilft sowohl aus algorithmischer Sicht als auch aus der Perspektive, zu lernen, was Python kann und wie man es manipuliert, um das Beste aus Python herauszuholen.
Aus ähnlichen Gründen habe ich gehört, dass Code Golf auch funktioniert, aber ich habe es nie selbst ausprobiert.
quelle
Lernalgorithmen / Mathematik / Datei-E / A / Pythonic-Optimierung
Dies wird Sie nicht zum Guru machen, aber um zu beginnen, versuchen Sie, die Project Euler-Probleme zu lösen. Die ersten 50 oder so sollten Sie nicht besteuern, wenn Sie eine anständige High-School-Mathematik haben und wissen, wie man Google. Wenn Sie eine lösen, gelangen Sie in das Forum, in dem Sie die Lösungen anderer Leute durchsehen können, die Ihnen noch mehr beibringen. Seien Sie jedoch anständig und veröffentlichen Sie Ihre Lösungen nicht, da die Idee darin besteht, die Leute zu ermutigen, es selbst auszuarbeiten.
Wenn Sie Brute-Force-Algorithmen verwenden, ist es unversöhnlich, sich zu zwingen, in Python zu arbeiten. Auf diese Weise lernen Sie, wie Sie große Datenmengen im Speicher anordnen und mit den schnellen Sprachfunktionen wie Wörterbüchern effizient darauf zugreifen können.
Dadurch habe ich selbst gelernt:
Und auch sehr wichtig
All dies sollte für die Bioinformatik relevant sein
Zugegeben, ich habe aus dieser Erfahrung nichts über die OOP-Funktionen von Python gelernt.
quelle
Haben Sie das Buch " Bioinformatik-Programmierung mit Python " gesehen? Sieht so aus, als wären Sie ein genaues Mitglied der Fokusgruppe.
quelle
Sie haben bereits viel Lesematerial, aber wenn Sie mehr verarbeiten können, empfehlen wir Ihnen, sich über die Entwicklung von Python zu informieren, indem Sie die Vorschläge zur Python-Verbesserung lesen, insbesondere die "fertigen" PEPs und die "Zurückgestellten, Verlassenen, Zurückgezogenen und Abgelehnten". PEPs.
Wenn Sie sehen, wie sich die Sprache geändert hat, welche Entscheidungen getroffen wurden und welche Gründe sie haben, werden Sie die Philosophie von Python aufgreifen und verstehen, wie "idiomatisches Python" entsteht.
http://www.python.org/dev/peps/
quelle
Versuchen Sie http://challenge.greplin.com/ mit Python
quelle
Jemand anderem beizubringen, der anfängt, Python zu lernen, ist immer eine großartige Möglichkeit, Ihre Ideen klar zu machen, und manchmal bekomme ich viele nette Fragen von Schülern, die mich dazu bringen, konzeptionelle Dinge über Python zu überdenken.
quelle
Nicht genau das, wonach Sie fragen, aber ich denke, es ist ein guter Rat.
Lerne eine andere Sprache, spielt keine Rolle, welche. Jede Sprache hat ihre eigenen Ideen und Konventionen, aus denen Sie lernen können. Erfahren Sie mehr über die Unterschiede in den Sprachen und vor allem sind
why
sie unterschiedlich. Probieren Sie eine rein funktionale Sprache wie Haskell aus und sehen Sie einige der Vorteile (und Herausforderungen) von Funktionen, die frei von Nebenwirkungen sind. Sehen Sie, wie Sie einige der Dinge, die Sie aus anderen Sprachen lernen, auf Python anwenden können.quelle
Ich empfehle, mit etwas zu beginnen, das Sie dazu zwingt, die Ausdruckskraft der Syntax zu erkunden. Python ermöglicht viele verschiedene Arten, dieselbe Funktionalität zu schreiben, aber es gibt oft einen elegantesten und schnellsten Ansatz. Wenn Sie an die Redewendungen anderer Sprachen gewöhnt sind, werden Sie diese besseren Möglichkeiten möglicherweise nie anders finden oder akzeptieren. Ich habe ein Wochenende damit verbracht, die ersten 20 Probleme mit Project Euler zu lösen, und mit Django in Google App Engine eine einfache Webanwendung erstellt. Dies führt Sie vielleicht nur vom Lehrling zum Anfänger, aber Sie können dann weiterhin etwas fortgeschrittenere Webanwendungen erstellen und fortgeschrittenere Project Euler-Probleme lösen. Nach ein paar Monaten ging ich zurück und löste die ersten 20 PE-Probleme von Grund auf in einer Stunde anstelle eines Wochenendes.
quelle