Ich habe in den letzten Jahren hauptsächlich C # -Entwicklung betrieben, aber vor kurzem angefangen, ein bisschen Python (nicht Iron Python) zu machen. Aber ich bin mir nicht sicher, ob ich den mentalen Sprung zu Python geschafft habe ... Ich habe das Gefühl, dass ich versuche, Dinge so zu tun, wie ich es in C # tun würde.
Irgendwelche Ratschläge, wie ich Python voll ausnutzen kann?
Oder irgendwelche Tipps / Tricks, Dinge, über die man mehr lernen kann, Dinge, auf die man achten muss?
Antworten:
Überprüfen Sie zunächst die Ratschläge von tgray und Lundström .
Dann einige Dinge, die Sie vielleicht wissen möchten:
Python ist dynamisch typisiert, sodass Sie im Gegensatz zu C # nicht den Typ, sondern das Verhalten überprüfen. Vielleicht möchten Sie über das Tippen von Enten googeln. Dies bedeutet, dass Sie sich nicht mit Boxen und Unboxing befassen müssen.
Python ist vollständig objektorientiert, aber die Syntax erzwingt dieses Paradigma nicht. Sie können Python schreiben, ohne das Wort "Klasse" zu verwenden.
Die in Python enthaltene GUI-Bibliothek kann nicht mit C # verglichen werden. Überprüfen Sie die PyQt- , GTK- oder wxPython- Bibliotheken.
Python hat viele Konzepte, mit denen Sie möglicherweise nicht vertraut sind: Listenverständnisse, Generatoren ("Ausbeute" existiert in C #, wird aber nicht häufig verwendet), Dekoratoren, Metaklassen usw. Haben Sie keine Angst; Sie können in Python ohne sie programmieren. Sie sind nur intelligente Werkzeuge, nicht obligatorisch.
Wie in C # ist die Python-Standardbibliothek riesig. Schauen Sie immer darauf, wenn Sie auf ein Problem stoßen. Es ist sehr wahrscheinlich, dass jemand es bereits gelöst hat.
Python verwendet LATE-Bindung und Variablenbeschriftungen. Es ist viel zu früh für jemanden, der mit der Sprache beginnt, sich darüber Gedanken zu machen, aber denken Sie daran, dass Sie eines Tages auf ein Verhalten mit Variablen stoßen werden, das unlogisch erscheint, und das müssen Sie überprüfen. Für den Moment:
Denken Sie daran, niemals Folgendes zu tun:
def myfunc(my_list=[]) : # bla
Stattdessen:
def myfunc(my_list=()) : my_list = list(my_list)
Und du wirst gut sein. Dafür gibt es einen guten Grund, aber darum geht es nicht :-)
Python ist plattformübergreifend, schreibt gerne auf Mac und läuft auf Wunsch unter Linux.
Python wird nicht mit einer komplexen IDE geliefert (Sie haben IDLE :-)). Wenn Sie Visual Studio-süchtig sind, überprüfen Sie Glade . Dies ist nicht so fortgeschritten wie Visual Studio, aber es ist immer noch ein gutes RAD .
Wenn Sie eine Webanwendung in Python entwickeln möchten, denken Sie daran, dass Python nicht .NET ist. Sie müssen ein Webframework hinzufügen, wenn Sie vergleichen möchten. Ich mag Django .
Python benötigt keine große IDE, um damit zu arbeiten. SciTE , Notepad ++ , IDLE , Kate , gedit ... Leichte Editoren sind wirklich ausreichend.
Python erzwingt das Einrücken mit Leerzeichen und Zeilenumbrüchen. Das können Sie nicht ändern. Sie sollten die Verwendung von Registerkarten zum Einrücken vermeiden und stattdessen Leerzeichen auswählen. Das Äquivalent zu leeren Armbändern {} ist das Schlüsselwort "pass".
Python erzwingt keine privaten Variablen. Sie können eine private Variable mit "__" (zwei Unterstriche) am Anfang des Variablennamens definieren, sie ist jedoch auf schwierige Weise umgangen. Python geht normalerweise davon aus, dass Programmierer erwachsen sind, die wissen, was sie tun und kommunizieren.
Python verwendet die Iteration. Viel. Viel viel. Und so ist das itertools-Modul Ihr bester Freund.
Python hat keine eingebauten Delegaten. Das Delegatenmodul ist nicht das, was Sie denken. Verwenden Sie für die ereignisgesteuerte Programmierung eine GUI-Bibliothek (oder codieren Sie das Muster selbst, es ist nicht so schwierig).
Python hat einen Interpreter: Sie können fast alles live testen. Es sollte immer neben Ihrem Texteditor ausgeführt werden. Python Basic Interpreter ist nicht viel, versuchen Sie IPython für etwas Leckeres.
Python ist automatisch dokumentiert: Verwenden Sie docstrings in Ihrem eigenen Code und konsultieren Sie andere mithilfe von "help ()" im Python-Interpreter
Modulgrundlagen:
Es gibt Hunderte von Modulen. Genießen.
Einige typische Methoden, um Dinge in Python zu tun:
Schleifen:
Python-Codierer verwenden massiv das Äquivalent der
foreach
C # -Schleife und ziehen es anderen vor:Grundlegende Iterationen:
for item in collection: print str(item)
"Sammlung" kann eine Zeichenfolge, eine Liste, ein Tupel sein ... Beliebig iterierbar: Jedes Objekt, das die .next () -Methode definiert. Es gibt viele iterable in Python. Beispiel: Eine typische Python-Sprache zum Lesen von Dateien:
for line in open("/path/to/file") : print line
Eine Verknüpfung zur for-Schleife wird als "Listenverständnis" bezeichnet. Es ist eine Möglichkeit, eine neue Iterable in einer Zeile zu erstellen:
Erstellen einer gefilterten Liste mit Listenverständnis:
my_list = [item for item in collection if condition]
Erstellen einer neuen Liste mit Listenverständnis:
my_list = [int(item) * 3 for item in collection]
Erstellen eines neuen Generators mit Listenverständnis:
my_list = (int(item) * 3 for item in collection)
Wie oben, aber die Werte werden sofort bei der ersten Iteration generiert und gehen dann verloren. Weitere Informationen dazu hier .
Gewöhnlich für Schleife
Wenn Sie eine übliche for-Schleife ausdrücken möchten, können Sie die Funktion xrange () verwenden.
for (int i = 0; i < 5; i++)
wird:for i in xrange(0,5) :
tun, während gleichwertig
In Python gibt es kein "Do While". Ich habe es nie verpasst, aber wenn Sie diese Logik verwenden müssen, gehen Sie wie folgt vor:
while True : # Yes, this is an infinite loop. Crazy, hu? # Do your stuff if condition : break
Auspacken
Variablen tauschen:
Mehrfachzuweisungen:
Das Obige ist nur ein Ergebnis dessen, was wir "Auspacken" nennen (hier angewendet auf ein Tupel). Eine einfache Möglichkeit, dies zu erklären, besteht darin, dass Sie jeden Wert einer beliebigen Sequenz direkt einer gleichen Anzahl von Variablen in einer Zeile zuweisen können:
animal1, animal2, animal3, animal4 = ["cow", "dog", "bird", "fish"]
Dies hat viele Auswirkungen. Während Sie in einem mehrdimensionalen Array iterieren, erhalten Sie normalerweise jede Teilsequenz einzeln und verwenden sie dann, zum Beispiel:
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")] for person in agenda: print person[0], person[1]
Beim Entpacken können Sie die Werte aber auch direkt Variablen zuweisen:
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")] for name, lastname in agenda: print name, lastname
Wenn Sie während der Iteration einen Index erhalten möchten, verwenden Python-Codierer die folgenden Redewendungen (enumerate () ist eine Standardfunktion):
for index, value in enumerate(sequence) : print index, value
Funktionsaufrufe auspacken
Dies ist eine fortgeschrittene Verwendung, und Sie können sie überspringen, wenn es Sie stört.
Sie können Werte mit dem Zeichen "*" entpacken, um eine Sequenz direkt in einem Funktionsaufruf zu verwenden. Z.B:
>>> foo(var1, var1, var3) : print var1, var2 print var3 >>> seq = (3.14, 42, "yeah") >>> foo(*seq) 3.14 42 yeah
Es gibt noch mehr als das. Sie können ein Wörterbuch als benannte Variablen entpacken und Funktionsprototypen mit schreiben
*
,**
um eine beliebige Anzahl von Argumenten zu akzeptieren. Aber es hat nicht genug verdient, um diesen Beitrag noch länger zu machen :-).String-Formatierung:
print "This is a %s on %s about %s" % ("post", "stackoverflow", "python") print "This is a %(subject)s on %(place)s about %(about)s" % {"subject" : "post", "place" : "stackoverflow", "about" : "python"}
Iterable in Scheiben schneiden:
Sie können jeden Teil eines Iterables mit einer sehr präzisen Syntax abrufen:
print "blebla"[2:4] # Print "eb" last = string[:-1] # Getting last element even = (0,1,2,3,4,5,6,7,8,9)[::2] # Getting evens only (third argument is a step) reversed = string[::-1] # Reversing a string
Logische Überprüfungen:
Sie können überprüfen, wie Sie es in C # tun, aber es gibt "pythonische" Möglichkeiten (kürzer, klarer :-)):
if 1 in (1, 2, 3, 4) : # Check en element is in a sequence if var : # check is var is true. Var == false if it's False, 0, (), [], {} or None if not var : # Contrary of above if thing is var: # Check if "thing" and "var" label the same content. if thing is None : # We use that one because None means nothing in Python (almost null)
Combo (alle Wörter, die ein "o" in Großbuchstaben enthalten, in eine Zeile drucken):
sentence = "It's a good day to write some code" print " ".join([word.upper() for word in sentence.split() if "o" in word])
Ausgabe: "GUT ZU EINIGEM CODE"
Es ist einfacher, um Vergebung zu bitten als um Erlaubnis
Python-Codierer prüfen normalerweise nicht, ob etwas möglich ist. Sie sind ein bisschen wie Chuck Norris. Sie machen es. Dann fangen Sie die Ausnahme. In der Regel überprüfen Sie nicht, ob eine Datei vorhanden ist, sondern versuchen, sie zu öffnen, und führen einen Rollback durch, wenn sie fehlschlägt:
try : f = open(file) except IOerror : print "no file here !"
Natürlich verwendet Chuck Norris niemals Ausnahmen, da er niemals versagt.
Die else-Klausel
"Else" ist eine Welt mit vielen Verwendungsmöglichkeiten in Python. Sie finden "sonst" nach "wenn", aber auch nach "außer" und "für".
for stuff in bunch : # Do things else : # This always happens unless you hit "break" in the loop
Dies funktioniert auch für die "while" -Schleife, auch wenn wir diese Schleife nicht so oft verwenden.
try : # A crazy stuff except ToCrazyError : # This happens if the crazy stuff raises a ToCrazyError Exception else : # This will happen if there is no error so you can put only one line after the "try" clause finally : # The same as in C#
Wenn Sie neugierig sind, finden Sie hier eine Reihe fortgeschrittener schneller und schmutziger (aber netter) Python-Schnipsel .
quelle
quelle
Wenn Sie nicht neu in der Programmierung sind, würde ich das Buch "Dive into Python" von Mark Pilgrim empfehlen . Es erklärt Python auf eine Weise, die es leicht macht zu verstehen, wie Python-Techniken und -Sprachen zum Erstellen praktischer Anwendungen angewendet werden können.
quelle
Beginnen Sie mit dem Lesen des Zen of Python
Sie können es unter dem obigen Link lesen oder einfach
import this
an der Python-Eingabeaufforderung eingeben. =)Nutzen Sie die Python-Funktionen, die C # nicht bietet *
Wie Ententypisierung, Metaklassen, Listenverständnis usw. *
Schreiben Sie einfache Programme, um diese Funktionen zu testen. Sie werden sich in kürzester Zeit an sie gewöhnen (wenn Sie nicht süchtig sind).
Schauen Sie sich die Python Standard Library an
Sie erfinden das Rad also nicht neu. Versuchen Sie nicht, das Ganze zu lesen. Selbst ein kurzer Blick auf das Inhaltsverzeichnis kann Ihnen viel Zeit sparen.
* Ich weiß, dass C # bereits einige dieser Funktionen hat, aber soweit ich sehen kann, sind sie entweder ziemlich neu oder werden von C # -Entwicklern nicht häufig verwendet. Bitte korrigieren Sie mich, falls ich falsch liege.
quelle
Falls Sie noch nichts davon gehört haben, ist Dive Into Python ein großartiger Ausgangspunkt für alle, die Python lernen. Es hat auch eine Reihe von Tipps und Tricks .
quelle
Wenn Sie jemand sind, der eine neue Sprache besser lernt, indem Sie kleine inkrementelle Schritte ausführen, würde ich die Verwendung von IronPython empfehlen . Verwenden Sie andernfalls reguläres CPython und führen Sie keine C # -Codierung mehr durch, bis Sie das Gefühl haben, Python zu verstehen.
quelle
Ich würde vorschlagen, einen guten Editor zu kaufen, damit Sie nicht von Leerzeichen gebissen werden. Der Einfachheit halber verwende ich nur die ActivePython-Pakete Link , die einen Editor und alle win32api-Bibliotheken enthalten. Es macht ziemlich viel Spaß, sich darauf einzulassen, wenn Sie C # verwendet haben. Das win32api in Python kann etwas einfacher sein. Sie müssen nicht die ganze DDLImport-Sache machen. Laden Sie ActivePython (das mit CPython geliefert wird) herunter, öffnen Sie es und geben Sie einige Dinge an der Konsole ein. Sie werden es ziemlich einfach lernen, nachdem Sie C # verwendet haben. Versuchen Sie für einige interessantere Python-Leckerbissen ActiveState-Code , der alle Arten von Rezepten enthält, mit denen Sie ganz einfach verschiedene Dinge sehen können, die Sie mit Python tun können.
quelle
Ich bin auch ziemlich in Ihren Schuhen und benutze immer noch C # für den größten Teil meiner Arbeit, aber Python immer mehr für andere Projekte.
@ e-satis kennt Python wahrscheinlich in- und auswendig und alle seine Ratschläge sind erstklassig. Aus meiner Sicht war das Folgende der größte Unterschied für mich:
Holen Sie sich wieder in Funktion. nicht unbedingt Spaghetti-Code, aber zu lernen, dass nicht alles in einem Objekt sein muss und sollte.
Der Dolmetscher. Es ist wie das unmittelbare Fenster, außer 10 ^ 10 besser. Aufgrund der Funktionsweise von Python benötigen Sie nicht das gesamte Gepäck und den Mist, den Sie mit C # eingeben müssen, bevor Sie die Dinge ausführen können. Sie können einfach in ein paar Zeilen schlagen und sehen, wie die Dinge funktionieren.
Normalerweise habe ich eine IDLE-Instanz eingerichtet, in der ich nur Schnipsel herumwerfe, während ich herausfinde, wie die verschiedenen Bits in der Sprache funktionieren, während ich meine Dateien bearbeite eine Liste, aber ich bin nicht 100% auf dem Lambda, das ich verwenden sollte ... schlagen Sie in ein paar Zeilen in IDLE, sehen Sie, wie es funktioniert und was es tut.
Und schließlich, die Verbosität von Python zu lieben, und das meine ich nicht in der langwierigen Bedeutung von Ausführlichkeit, sondern wie e-satis betonte, Verben wie "in", "ist", "für" usw.
Wenn Sie in C # viel nachgedacht haben, werden Sie weinen müssen, wenn Sie sehen, wie einfach das gleiche Zeug in Python ist.
Viel Glück damit.
quelle
Wenn Sie Programmiererfahrung haben und keine Lust haben, Geld auszugeben, würde ich empfehlen, wie man wie ein Informatiker in Python denkt .
quelle
Und dann etwas, von dem Sie profitieren können:
IPython- Shell: Automatische Vervollständigung in der Shell. Es führt Stapeloperationen durch, fügt eine Menge Funktionen, Protokollierung und dergleichen hinzu. >>> Spiel mit der Muschel - immer!
easy_install / pip : So schön und einfach, eine Python-Anwendung eines Drittanbieters zu installieren.
quelle