Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln

Dies ist der erste Beitrag. Ich freue mich darauf, mit Dir zu arbeiten.

Ich werde Python zum ersten Mal seit einiger Zeit mit RaspberryPi berühren und die Ergebnisse notieren, die ich verfolgt habe, um es mir leichter zu machen.

Ich bin nicht besonders auf die sogenannte Dunkelheit ausgerichtet. Bitte lassen Sie mich wissen, wenn Sie nichts tun können.

Wie wäre es mit Lambda? Kannst du es benutzen?

Ich wusste vorher nicht, wie man Lambda benutzt. Ich denke, ich mag die Tatsache, dass es jetzt verschiedene Einschränkungen gibt. Ich möchte alles Mögliche in Lambda schreiben.

Nehmen wir ein Beispiel für eine schnelle Sortierung. Zuallererst in def?

def qs( xs ) :
        le = [x for x in xs[1:] if x<=xs[0] ]
        gt = [x for x in xs[1:] if x>xs[0] ]
        if xs == []:
                return []
        else:
                return qs( le ) + [ xs[0] ] + qs( gt )

Ist es so

Können Sie ersetzen?

Wenn Sie normal mit Lambda schreiben,

qs=(lambda xs :
	[] if xs == [] else
    qs( [x for x in xs[1:] if x<=xs[0] ] ) + [ xs[0] ] 
    + qs( [x for x in xs[1:] if x>xs[0] ] )
)

Nicht schlecht, aber es fühlt sich lang und chaotisch an. Ich frage mich, ob das def wäre. Nach alldem. Es ist nicht möglich, einer Variablen in der Mitte zuzuweisen, aber es scheint, dass sie an einen Namen gebunden und definiert werden kann.

qs=(lambda xs :
    (lambda 
    	le = [x for x in xs[1:] if x<=xs[0] ] ,
    	gt = [x for x in xs[1:] if x>xs[0] ] :
            [] if xs == [] else
            qs( le ) + [ xs[0] ] + qs( gt )
    )()
)

Ist es nicht in Ordnung, sauber zu sein? Ich mag es, weil es keine Rückkehr gibt ... Erstellen Sie einen weiteren Lambda-Ausdruck und führen Sie ihn mit den Standardargumenten aus. Das bedeutet, dass die von Ihnen festgelegten Standardargumente als Variablen verwendet werden können, oder?

Sie können Argumente und Variablen außerhalb von Ihnen aus dem inneren Lambda-Ausdruck verwenden. Wenn Sie so etwas wie Lambda x = 1, y = x: tun, sucht y nach x außerhalb von Ihnen anstelle des nächsten x = 1. Argumente, die nicht verwandt sind, befinden sich im selben Lambda-Ausdruck. Wenn es eine Referenzbeziehung gibt, ändern Sie die Stufe. Die Anzahl der Stufen wird nach Bedarf erhöht oder verringert.

Übrigens scheint es besser, keine anderen dynamischen Standardargumente als Konstanten für die äußersten Argumente festzulegen. Der Standardwert bei der ersten Generierung wird aufgezeichnet und funktioniert normalerweise nicht wie erwartet.

Schalten, nacheinander ausführen ...

Immerhin, was Sie mit Lambda machen wollen

  1. Verzweigen Sie gemäß der aus dem Argument abgeleiteten Bedingung
  2. Unrein? Während der Ausführung von Vorgängen (Eingabe / Ausgabe, Anzeige usw.) nacheinander
  3. Führen Sie eine reine Berechnung durch und geben Sie den Wert zurück.

Ich fühle mich wie ich dabei bin. Es ist ein wenig schmerzhaft, nur ~ wenn ~ sonst ~ verwenden zu können, wenn es viele Zweige gibt. Ich möchte zuerst die Bedingung und später die Operation schreiben!

Ich wollte es schaffen. Es hat jedoch nicht so viel Technik, also näherte ich mich ihm mit einem trügerischen Aussehen.

Bereiten Sie sich zuerst vor.

box=lambda *x:x
unbox=lambda x:x[-1]
    
do=box             
switch=unbox

Beim Benutzen

switch(
	(Bedingung 1)    and do(Ausführungsformel 1a,Ausführungsformel 1b,...)
	or (Bedingung 2) and do(Ausführungsformel 2a,Ausführungsformel 2b,...)
	...
	or            do(Letzte ausführbare Datei a,Letzte ausführbare Datei b,...)
)

Dies verzweigt bedingt, übergibt das Ergebnis als Taple an switch (), während die Ausdrücke in der Reihenfolge mit do () ausgewertet werden, und switch () gibt das letzte Element des Tapples zurück. Das letzte do () ist der Ausdruck, wenn alle Bedingungen falsch sind.

Der Zweck des Ein- und Auslegens in den Taple besteht darin, zu verhindern, dass der Rückgabewert des Ausführungsausdrucks die Steuerung von und / oder beeinflusst.

Es gibt keine besondere Bedeutung zu wechseln und zu tun. Ich dachte, dass es für Menschen so sein könnte, also habe ich es geändert. Es gibt keine Funktion, die man sich aus dem Namen vorstellen kann.

Im schnellen Sortierbeispiel


qs=(lambda xs :
    (lambda 
        le = [x for x in xs[1:] if x<=xs[0] ] , 
        gt = [x for x in xs[1:] if x>xs[0] ] :
        switch(
            xs == [] and do( [] )  
            or do( qs( le ) + [ xs[0] ] + qs( gt ) )
        )
    )()
)

Die Anzahl der Zeichen hat etwas zugenommen, aber irgendwie scheint die Bedeutung vermittelt zu werden. Ich glaube nicht, dass ich einen Fehler machen werde.

Übrigens, wenn Sie das gleiche normal schreiben

qs=(lambda xs :
    (lambda 
        le = [x for x in xs[1:] if x<=xs[0] ] , 
        gt = [x for x in xs[1:] if x>xs[0] ] :
        (
            xs == [] and ( [], )  
            or ( qs( le ) + [ xs[0] ] + qs( gt ) ,)
        )[-1]
    )()
)

Das ist ordentlich damit. Es ist ein Han. Aber ich bin mir nicht sicher, was ich tue, und wenn ich es schreibe, vergesse ich [-1] und Kommas.

Recommended Posts

Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln
Versuchen Sie es mit Python.
Betreiben Sie TwitterBot mit Lambda, Python
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Versuchen Sie, Python mit Try Jupyter auszuführen
Versuchen Sie die Gesichtserkennung mit Python
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Versuchen Sie es mit Python + Beautiful Soup
Versuchen Sie, Facebook mit Python zu betreiben
Gesichtserkennung mit Lambda (Python) + Erkennung
Versuchen Sie die Singularwertzerlegung mit Python
Führen Sie mruby mit Python oder Blender aus
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Versuchen Sie die Frequenzsteuerungssimulation mit Python
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Versuchen Sie, sich mit Python bei qiita anzumelden
Versuchen Sie eine Formel mit Σ mit Python
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen
[Fortsetzung] Versuchen Sie den Zugriff auf das SPS-Register mit Python
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Versuchen Sie, Foldl und Foldr mit Python: Lambda zu machen. Auch Zeitmessung
nginxparser: Versuchen Sie, die nginx-Konfigurationsdatei mit Python zu analysieren
FizzBuzz in Python3
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Scraping mit Python
Statistik mit Python
Probieren Sie es mit Word Cloud Japanese Python JupyterLab.
Scraping mit Python
Python mit Go
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Erreichen Sie eine grundlegende Authentifizierung mit CloudFront Lambda @ Edge mit Python 3.8
Twilio mit Python
Versuchen Sie, einen Cisco Spark Bot mit AWS Lambda + Amazon API Gateway (Python) zu implementieren.
Spielen Sie mit 2016-Python
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
LINE BOT mit Python + AWS Lambda + API Gateway
Getestet mit Python
Versuchen Sie, Python-Dokumente automatisch mit Sphinx zu generieren
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
mit Syntax (Python)
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
[AWS] Versuchen Sie, API Gateway + Lambda mit X-Ray zu verfolgen
[Python3] [Ubuntu16] [Docker] Versuchen Sie die Gesichtserkennung mit OpenFace
Exportieren Sie den RDS-Snapshot mit Lambda (Python) nach S3.
Bingo mit Python
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Laden Sie Dateien mit Lambda (Python) auf Google Drive hoch.
Wenig bekannte Python-Sprachspezifikation (kompatibel mit Python 3.4 oder höher)
Excel mit Python
Versuchen Sie, Fische mit Python + OpenCV2.4 (unvollendet) zu erkennen.