Enumeration
Zuvor haben wir es so gemacht:
i = 0
for item in iterable:
print i, item
i += 1
Jetzt machen wir es so:
for i, item in enumerate(iterable):
print i, item
Die Funktion enumerate kann auch einen zweiten Parameter akzeptieren, und zwar so:
>>> list(enumerate('abc'))
[(0, 'a'), (1, 'b'), (2, 'c')]
>>> list(enumerate('abc', 1))
[(1, 'a'), (2, 'b'), (3, 'c')]
Dictionary-/Set-Comprehension
Du kennst vielleicht Listen-Comprehension, aber möglicherweise nicht Dictionary-/Set-Comprehension. Sie sind einfach, leicht zu verwenden und effizient. Wie im folgenden Beispiel:
my_dict = {i: i * i for i in xrange(100)}
my_set = {i * 15 for i in xrange(100)}
# There is only a difference of ':' in both
# 两者的区别在于字典推导中有冒号
Gleitkommadivision erzwingen
Wenn wir eine ganze Zahl dividieren, liefert Python 2 (Anmerkung des Herausgebers: Ich habe hier die Versionsnummer hinzugefügt), selbst wenn das Ergebnis eine Gleitkommazahl ist, uns trotzdem eine ganze Zahl. Um dieses Problem zu vermeiden, müssen wir Folgendes tun:
result = 1.0/2
Aber jetzt gibt es einen anderen Weg, dieses Problem zu lösen, und mir war vorher nicht einmal bewusst, dass eine solche Methode existiert. Du kannst Folgendes tun:
from __future__ import division result = 1/2 # print(result) # 0.5
Siehst du, jetzt musst du nicht ".0" an die Daten anhängen, um die genaue Antwort zu erhalten. Beachte, dass dieser Trick nur in Python 2 funktioniert. In Python 3 musst du den Import nicht durchführen, da er standardmäßig bereits importiert ist.
Einfacher Server
Möchtest du schnell und bequem Dateien in einem Verzeichnis teilen? Du kannst es so machen:
# Python2 python -m SimpleHTTPServer # Python 3 python3 -m http.server
Dadurch wird ein Server gestartet.
Auswerten von Python-Ausdrücken
Wir alle kennen die Funktion eval, aber kennen wir die Funktion literal_eval? Vielleicht wissen es viele nicht. Du kannst diese Operation verwenden:
import ast my_list = ast.literal_eval(expr)
um die folgende Operation zu ersetzen:
expr = "[1, 2, 3]" my_list = eval(expr)
Ich glaube, diese Form sehen die meisten zum ersten Mal, aber tatsächlich gibt es sie in Python schon seit Langem.
Skript-Profiling
Sie können Skripte ganz einfach profilieren, indem Sie den folgenden Code ausführen:
python -m cProfile my_script.py
Objekt-Introspektion
In Python können Sie Objekte mit der Funktion dir() inspizieren. Wie im folgenden Beispiel:
>>> foo = [1, 2, 3, 4] >>> dir(foo) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', ... , 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Debuggen von Skripten
Sie können ganz einfach Haltepunkte in Ihrem Skript über das pdb-Modul setzen. Wie im folgenden Beispiel:
import pdb pdb.set_trace()
Sie können pdb.set_trace() überall in Ihrem Skript hinzufügen, und diese Funktion setzt an dieser Stelle einen Haltepunkt.
Vereinfachung von if-Anweisungen
Wenn Sie mehrere Werte prüfen müssen, können Sie die folgende Methode verwenden:
if n in [1,4,5,6]:
um die folgende Vorgehensweise zu ersetzen:
if n==1 or n==4 or n==5 or n==6:
Umkehren von Zeichenketten/Sequenzen
Mit der folgenden Methode können Sie eine Sequenz schnell umkehren:
>>> a = [1,2,3,4] >>> a[::-1] [4, 3, 2, 1] # This creates a new reversed list. # If you want to reverse a list in place you can do: a.reverse()
Diese Methode funktioniert auch zum Umkehren von Zeichenketten:
>>> foo = "yasoob" >>> foo[::-1] 'boosay'
Schönformatierung
Sie können Wörterbücher und Sequenzen auf folgende Weise übersichtlich ausgeben:
from pprint import pprint pprint(my_dict)
Diese Weise ist effizienter für das Ausgeben von Wörterbüchern. Wenn Sie außerdem ein JSON-Dokument aus einer Datei übersichtlich ausgeben möchten, können Sie die folgende Methode verwenden:
cat file.json | python -m json.tool
Ternärer Operator
Der ternäre Operator ist eine Kurzform für if-else-Anweisungen, auch bekannt als bedingte Ausdrücke. Hier sind einige Beispiele zu Ihrer Orientierung; sie können Ihren Code kompakter und eleganter machen.
[on_true] if [expression] else [on_false] x, y = 50, 25 small = x if x < y else y