Ich habe Funktionssynthese und Curry mit Python versucht

Python hat teilweise

Es gibt jedoch kein Curry. Ich bin traurig. Also habe ich eine Curry-Funktion geschrieben, die selbst Positionsargumente zählt.

Funktionssynthese

Zuerst habe ich eine Funktionskomposition geschrieben. Es ist einfach und schäbig.

def compose(*funcs: Callable) -> Callable:
    '''
    >>> compose(multest, multest)(4)
    16
    '''
    def composed(*args: Any) -> Any:
        return reduce(lambda x, y: y(x), (funcs[0](*args),)+funcs[1:])
    return composed

Currying-Funktionen

Der Mechanismus ist so einfach wie das Überprüfen der Anzahl der Positionsargumente und das teilweise Partialisieren. Also manchmal funktioniert es nicht.

def _curry_one(func: Callable) -> Callable:
    def wrap(*args: Any, **kwargs: Any) -> Any:
        return partial(func, *args, **kwargs)
    return wrap


def curry(num_of_args: Optional[int] = None) -> Callable:
    '''
    >>> fnc = curry(2)(multest2)
    >>> fnc(2)(3)
    6
    >>> fnc = curry()(multest3)
    >>> fnc(2)(3)(4)
    24
    '''
    def curry_wrap(func: Callable) -> Callable:
        length_of = compose(filter, list, len)
        if num_of_args:
            num = num_of_args
        else:
            def is_empty(x): return x.default is inspect._empty
            num = length_of(is_empty,
                            inspect.signature(func).parameters.values())
        for n in range(num - 1):
            func = _curry_one(func)
        return func
    return curry_wrap

Wenn Sie dies curryen, zählen Sie die Anzahl der Argumente und curry so viele wie die Anzahl der Positionsargumente. Sie können auch die Anzahl der Currys angeben. In der Praxis ist es jedoch auf 2 festgelegt und es fühlt sich gut an.

Warum ist es Curry? Ist es teilweise nutzlos?

Es kann teilweise sein, aber dieses Curry kann als Dekorateur verwendet werden.

@curry()
def test(x, y, z):
    return x * y + z

Es ist auch manchmal praktisch, wenn es als Funktion höherer Ordnung verwendet wird. Hauptsächlich, wenn es notwendig ist, Fälle zu trennen Wenn ich eine Sternenkarte herausbringen muss. Zum Beispiel kann ich den letzten Teil unten nicht lesen. (Schreiben)

def plus(x, y):
    return x * y

result = list(map(partial(plus, 3), range(4)))

Auch wenn dieser Typ teilweise getrennt ist.

def plus(x, y):
    return x * y

plus3 = partial(plus)
result = list(map(plus3, range(4)))

Der Namensraum ist ein bisschen ... Ich fühle mich unwohl mit mehr plus hoge. Ich kann diesen Kerl so schreiben

@curry()
def plus(x, y):
    return x * y

result = compose(map, list)(plus(3), range(4))

Ist es okay das zu tun?

Es wird entschieden, nutzlos zu sein, es ist gut, dass Python das gleiche ist, egal wer es schreibt. Daher sollte das oben genannte nicht verwendet werden.

Auflösung

Wenn es nicht funktioniert, warum hast du das getan?

Verwenden Sie numpy in Ihrem persönlichen Projekt. Ich bin selbstständig, aber ich war enttäuscht, weil ich den Code nicht lesen konnte, weil ich einen solchen Code geschrieben habe.

np.save(fname, baseline(np.square(fft(data.mean(axis=1)))))

Dies ist ein wissenschaftliches Berechnungspaket, daher gibt es in der Situation Raum für Überlegungen (gibt es das?) Es gab so viele mathematische Variablen, dass der Namespace verrückt war ... Wenn es hier Currying und Funktionszusammensetzung gäbe, wäre dies der Fall, oder?

mean = curry(np.mean)
save = curry(np.save)
compose(mean(axis=1), fft, np.square, np.std, save(fname))(data)

... nicht wahr? Persönliche Projekt-Unschuldstheorie.

Recommended Posts

Ich habe Funktionssynthese und Curry mit Python versucht
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, WebScraping mit Python.
Ich habe mit PyQt5 und Python3 gespielt
Funktionssynthese und Anwendung in Python
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, mit Python ② (Fibonacci-Zahlenfolge) aufzuklären.
Ich habe Numba mit Python3.5 installiert und verwendet
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe Python> autopep8 ausprobiert
Ich habe L-Chika mit Razpai 4 (Python Edition) ausprobiert.
Ich habe versucht, mit PartiQL und MongoDB verbunden zu spielen
Ich habe "Python Dictionary Type" und "Excel Function" verglichen.
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, Mecab mit Python2.7, Ruby2.3, PHP7 zu verwenden
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, Deep Floor Plan mit Python 3.6.10 auszuführen.
Ich habe versucht, eine E-Mail mit SendGrid + Python zu senden
Ich habe Python> Decorator ausprobiert
Ich habe versucht, den Google-Kalender mit CSV-Terminen mithilfe von Python und Google API zu aktualisieren
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, Python-Code zu beschleunigen, einschließlich der if-Anweisung mit Numba und Cython
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe pipenv und asdf für die Python-Versionskontrolle ausprobiert
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Einführung in Pipe Operator und Funktionszusammensetzung in Python (vorläufig)
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
2017-04-11 Python> Ich habe Generator ausprobiert> Mir wurde Generatorausdruck / Generatorfunktion / next () beigebracht.
Ich habe versucht, eine CSV-Datei mit Python zu berühren
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion