Python -Verknüpfungen
-
13-09-2019 - |
Frage
Python ist voller kleiner Abkürzungen.
Zum Beispiel:
self.data = map(lambda x: list(x), data)
und (obwohl nicht so hübsch)
tuple(t[0] for t in self.result if t[0] != 'mysql' and t[0] != 'information_schema')
unter unzähligen anderen.
Im IRC -Kanal sagten sie "zu viele, um sie alle zu kennen".
Ich denke, wir sollten einige hier auflisten, da ich diese Verknüpfungen liebe, um meinen Code zu verkürzen und zu refctor. Ich bin sicher, das würde vielen zugute kommen.
Lösung
self.data = map(lambda x: list(x), data)
ist Dreck - Verwendung
self.data = map(list, data)
Wenn du a map
Fanatiker (Listenverständnisse werden heutzutage im Allgemeinen bevorzugt). Allgemeiner, lambda x: somecallable(x)
kann stets produktiv in gerecht verändert werden somecallable
, in jeder Kontext, mit nur guter Wirkung.
In Bezug auf Abkürzungen im Allgemeinen haben meine Frau und ich unser Bestes getan, um die wichtigste und nützlichste im frühen Teil der zweiten Ausgabe des Python -Kochbuchs aufzulisten - könnte ein Anfang sein.
Andere Tipps
Alex Martelli stellte eine noch kürzere Version Ihres ersten Beispiels zur Verfügung. Ich werde eine (leicht) kürzere Version Ihrer zweiten bereitstellen:
tuple(t[0] for t in self.result if t[0] not in ('mysql', 'information_schema'))
Offensichtlich wird der In -Operator vorteilhafter, je mehr Werte Sie testen.
Ich möchte auch betonen, dass das Verkürzen und Refaktoring nur insofern gut ist, als es die Klarheit und Lesbarkeit verbessert. (Es sei denn, Sie sind Code-Golfing;)
Ich bin mir nicht sicher, ob dies eine Abkürzung ist, aber ich liebe es:
>>> class Enum(object):
def __init__(self, *keys):
self.keys = keys
self.__dict__.update(zip(keys, range(len(keys))))
def value(self, key):
return self.keys.index(key)
>>> colors = Enum("Red", "Blue", "Green", "Yellow", "Purple")
>>> colors.keys
('Red', 'Blue', 'Green', 'Yellow', 'Purple')
>>> colors.Green
2
(Ich weiß nicht, wer sich das ausgedacht hat, aber ich war es nicht.)
Ich mochte immer das "Unzip" -Idiom:
>>> zipped = [('a', 1), ('b', 2), ('c', 3)]
>>> zip(*zipped)
[('a', 'b', 'c'), (1, 2, 3)]
>>>
>>> l,n = zip(*zipped)
>>> l
('a', 'b', 'c')
>>> n
(1, 2, 3)