Erstellt eine Python-Bibliothek, um komplexe Einschlüsse zu schreiben und auf einfach zu lesende Weise zu reduzieren

Ich habe einen Artikel wie Tipps zum Schreiben einer komplizierten Einschlussnotation auf einfach zu lesende Weise geschrieben, aber darauf basierend eine Bibliothek namens xcomp erstellt. .. Verfügbar auf Github.

Das Folgende sind die grundlegenden Ziele.

Installation

pip install git+git://github.com/ukyo-su/xcomp@master

comp(collector)

for xcomp import comp

# a = [i for i in range(5)]Anstatt
@comp(list)
def a():
    for i in range(5):
        yield i

# a == [0, 1, 2, 3, 4]

#Sie können auch die Summe nehmen. diktieren und setzen sind ebenfalls möglich
@comp(sum)
def a():
    for i in range(5):
        yield i

# a == 10

#Leicht zu lesen, auch komplizierte Einschlüsse
@comp(list)
def fizz_buzz():
    for i in range(30):
        if i % 15 == 0:
            yield "Fizz Buzz"
        elif i % 3 == 0:
            yield "Fizz"
        elif i % 5 == 0:
            yield "Buzz"
        else:
            yield i

multi_comp(*collectors) Wenn Sie mehrere Sammlungen in einer Schleife erstellen möchten.

from xcomp import multi_comp

data = [(0, 1), (2, 3)]

@multi_comp(list, list)
def a():
    for i, j in data:
        yield i, j

a_i, a_j = a

# a_i == [0, 2]
# a_j == [1, 3]

reduce_comp(init, for_=None, for_nest=(), result=lambda x: x)

Ein Dekorateur zum Schreiben von functools.reduce ein wenig leichter zu lesen. Racket's [for / fold](https://docs.racket-lang.org/reference/for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%2Ffold% 29% 29) ist die ursprüngliche Geschichte.

from xcomp import reduce_comp

# reduce(lambda sum_, i: sum_ + i, range(5), 0)
@reduce_comp(0, for_=range(5))
def a(sum_, i):
    return sum_ + i

# a == 10

#Verschachtelt für ist auch OK
@reduce_comp([], for_nest=(range(3), range(2)))
def a(acc, i, j):
    return [*acc, (i, j)]

# a == [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]

#Wenn Sie am Ende einen Versuch hinzufügen
@reduce_comp([], for_=range(5),
             result=lambda x: list(reversed(x)))
def a(acc, i):
    return [*acc, i]

# a == [4, 3, 2, 1, 0]

# break,unterstützt auch weiterhin
@reduce_comp(0, for_=range(100))
def a(acc, i):
    if i > 5:
        raise BreakReduce
    return acc + 1

# a == 6

@reduce_comp(0, for_=range(10))
def a(acc, i):
    if i < 5:
        raise ContinueReduce
    return acc + i

# a == 35

(Ist es wirklich leicht zu lesen ...?)

multi_reduce_comp(*inits, for_=None, for_nest=(), result=lambda *args: args)

Reduce_comp wenn es mehrere akkumulierende Variablen gibt. Dies ist in der Nähe von Rackets "for / fold".

@multi_reduce_comp(0, [],
                   for_=range(5))
def a(sum_, rev_list, i):
    return sum_ + i, [i, *rev_list]

a_sum, a_rev_list = a

# a_sum == 10
# a_rev_list == [4, 3, 2, 1, 0]

@multi_reduce_comp([], set(),
                   for_=[0, 1, 1, 2, 3, 4, 4, 4],
                   result=lambda acc, seen: list(reversed(acc)))
def a(acc, seen, i):
    if i in seen:
        return acc, seen
    else:
        return [i, *acc], {*seen, i}

# a == [0, 1, 2, 3, 4]

delay_arg(func, *args, **kwargs)

Funktion höherer Ordnung, um das erste Argument zu beenden. delay_arg (f, * args, ** kwargs) (a) wird zu f (a, * args, ** kwargs).

Sie können "Karte", "Filter", "Reduzieren" als Dekorateure verwenden.

@list
@delay_arg(map, range(5))
def a(i):
    return i * 2

# a == [0, 2, 4, 6, 8]

Recommended Posts

Erstellt eine Python-Bibliothek, um komplexe Einschlüsse zu schreiben und auf einfach zu lesende Weise zu reduzieren
Veröffentlichen / Hochladen einer in Python erstellten Bibliothek in PyPI
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
[Python] Kombinieren von Listen mit Zahlen zu Zeichenfolgen und Schreiben in eine Ausgabedatei
Auf der Suche nach einer effizienten Möglichkeit, eine Docker-Datei mit Python mit Gedichten zu schreiben
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Schreiben Sie Tests in Python, um die Abdeckung zu profilieren und zu überprüfen
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
Entwickelte eine Bibliothek, um die Kindle-Sammlungsliste in Python abzurufen
Eine Standardmethode zum Entwickeln und Verteilen von Paketen in Python
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Versuchen Sie einfach, einen Webhook mit ngrok und Python zu erhalten
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
Ein Spiel für ein Abenteuer im interaktiven Python-Modus
Ich habe eine Python-Bibliothek erstellt, um die API von LINE WORKS aufzurufen
Schreiben Sie einen HTTP / 2-Server in Python
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Schreiben Sie ein Kreisdiagramm in Python
Schreiben Sie das Vim-Plugin in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Eine Alternative zu "Pause" in Python
Schreiben Sie eine C-Sprach-Linkliste in einem objektorientierten Stil (mit Codevergleich zwischen Python und Java).
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Ein leicht verständlicher Vergleich der grundlegenden Grammatik von Python und Go
Lassen Sie uns JavaScript wegwerfen und ein Web-Frontend in Python schreiben!
So setzen Sie in Python ein Leerzeichen mit halber Breite vor Buchstaben und Zahlen.
Ich habe versucht, Cpaw Level1 & Level2 Write Up auf leicht verständliche Weise zusammenzufassen
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
So schreiben Sie eine Zeichenfolge, wenn Python mehrere Zeilen enthält
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Schreiben Sie die O_SYNC-Datei in C und Python
Wie bekomme ich Stacktrace in Python?
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Lesen und schreiben Sie JSON-Dateien mit Python
Schreiben Sie eine einfache Giermethode in Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
Ich habe ein Passwort-Tool in Python erstellt.
Verwendung ist und == in Python
Wie schreibe ich Ruby to_s in Python
[Python] Erstellt eine Klasse, um mit pyaudio Sinuswellen im Hintergrund zu spielen
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Verwendung der C-Bibliothek in Python
Organisieren Sie Python-Module und -Pakete in einem Chaos