[PYTHON] So geben Sie eine unendliche Anzahl von Toleranzen in der Überprüfung der numerischen Argumentvalidierung von argparse an

Es gibt Argparse als Standardbibliothek, die die argumentbezogene Verarbeitung von Python-Skripten unterstützt. Mit argparse können Sie gültige Argumente mit Validierungsprüfungen hinzufügen. Dieses Mal werde ich beschreiben, wie das Argument "Es gibt einen gültigen Bereich numerischer Werte" mit argparse angegeben wird.

Überblick über Argparse

argparse ist eine Python-Bibliothek, die Befehlszeilenoptionen und -argumente analysiert. Es ist seit Python 2.7 verfügbar und als Standardbibliothek enthalten (Sie müssen sich also nicht die Mühe machen, pip zu verwenden, und Sie müssen nicht "Bitte setzen Sie diese Bibliothek ein" hinzufügen, wenn Sie es an andere Benutzer verteilen).

Offizielle Python-Dokumentation argparse https://docs.python.jp/3/library/argparse.html

Neben argparse gibt es die folgenden Python-Bibliotheken, die diese Art der Analyse durchführen.

Optionsparser, den Pythonista kennt http://qiita.com/petitviolet/items/aad73a24f41315f78ee4

Überprüfen Sie die Toleranz

Implementieren Sie Folgendes, um die Verarbeitung der Argumentanalyse mit argparse einzuschließen. (Im Folgenden wird die Ganzzahlwertoption "-s" hinzugefügt.)

Beispiel für die Argumentprüfung.py


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='LightsOut Solver')
    parser.add_argument('-s', type=int, help='LightsOut Size')

Wenn Sie im Argument type von ArgumentParser # add_argument string oder int angeben, wird geprüft, ob der als Argument angegebene Wert als dieser Typ behandelt werden kann.

Um "Toleranzbereich" als Bedingung für das Hinzufügen von Argumenten wie oben beschrieben anzugeben, ist es in Ordnung, einen Wert, der den Toleranzbereich angibt, in das Argument "Auswahl" von "ArgumentParser # add_argument" einzugeben.

Argumentprüfung sample2.py


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='LightsOut Solver')
    parser.add_argument('-s', type=int, choice=range(1,6), help='LightsOut Size')

Sie können für diese Auswahl jedoch nur dann einen festen Wert angeben, wenn er als Array dargestellt werden kann. Mit anderen Worten kann nur eine endliche Anzahl von Bereichen eingegrenzt werden. Um eine unendliche Anzahl von Bereichen anzugeben (z. B. "Ganzzahl von 2 oder mehr" oder "reelle Zahl von 0 oder mehr und 1 oder weniger"), können Sie mit "Funktion beurteilen, ob der Wert akzeptabel ist" anstelle von "Array zum Angeben des Bereichs". Es ist in Ordnung, wenn Sie angeben. Unten finden Sie den Beispielcode, der als Bereich "eine Ganzzahl größer oder gleich 2" angibt.

Argumentprüfung sample3.py


class range_check(object):
    def __init__(self, low_limit=None, high_limit=None, vtype="integer"):
        self.min = low_limit
        self.max = high_limit
        self.type = vtype

    def __contains__(self, val):
        ret = True
        if self.min is not None:
            ret = ret and (val >= self.min)
        if self.max is not None:
            ret = ret and (val <= self.max)
        return ret

    def __iter__(self):
        low = self.min
        if low is None:
            low = "-inf"
        high = self.max
        if high is None:
            high = "+inf"
        L1 = self.type
        L2 = " {} <= x <= {}".format(low, high)
        return iter((L1, L2))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='LightsOut Solver')
    parser.add_argument('-s', type=int, choices=range_check(low_limit=2), help='LightsOut Size')

Außerdem wird beschrieben, wie das mit diesem Code erstellte Beispielprojekt beschrieben wird. https://github.com/LyricalMaestro/lightsout-solver-python

Zusammenfassung

Wenn Sie die Prüfmethode vollständig nutzen, können Sie mit argparse eine hochflexible Validierungsprüfung durchführen. Verwenden Sie es, um großartige Skripte zu erstellen.

Verweise

Offizielle Python-Dokumentation argparse https://docs.python.jp/3/library/argparse.html

Optionsparser, den Pythonista kennt http://qiita.com/petitviolet/items/aad73a24f41315f78ee4

Recommended Posts

So geben Sie eine unendliche Anzahl von Toleranzen in der Überprüfung der numerischen Argumentvalidierung von argparse an
So ermitteln Sie die Anzahl der Stellen in Python
So finden Sie die optimale Anzahl von Clustern für k-means
Wie Sie die interne Struktur eines Objekts in Python kennen
So überprüfen Sie die Speichergröße einer Variablen in Python
[TensorFlow 2] So überprüfen Sie den Inhalt von Tensor im Diagrammmodus
So überprüfen Sie die Version von Django
[LPIC 101] So geben Sie die Festplattenpartitionsnummer in der GRUB-Einstellungsdatei an
Wie man eine Benutzergruppe mit Slack-Benachrichtigung erwähnt, wie man die ID einer Benutzergruppe überprüft
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Wie man die Portnummer des xinetd-Dienstes kennt
[Golang] Geben Sie ein Array für den Wert der Karte an
[Python] Zusammenfassung, wie die Farbe der Figur angegeben wird
[Selen] Wie wird der relative Pfad des Chromedriver angegeben?
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
So zählen Sie die Anzahl der Vorkommen jedes Elements in der Liste in Python mit der Gewichtung
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
[Für Anfänger] Ich möchte die Anzahl der Lernerfahrungen leicht verständlich erklären.
So manipulieren Sie das DOM im Iframe mit Selen
So überprüfen Sie anhand des Hashwerts, ob der Inhalt des Wörterbuchs in Python identisch ist
So überprüfen Sie, ob ein Wert in einem Aufzählungstyp vorhanden ist
So berechnen Sie die Summe oder den Durchschnitt von Zeitreihen-CSV-Daten in einem Augenblick
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
So erhalten Sie einen Überblick über Ihre Daten in Pandas
Mal sehen, wie man die Anzahl der Elemente in einem Array in einigen Sprachen zählt [Go, JavaScript, PHP, Python, Ruby, Swift]
So entfernen Sie die "Tags müssen ein Array von Hashes sein." Fehler in Qiita API
So geben Sie beim Testen absichtlich einen Fehler in der Shell aus
So bestimmen Sie die Existenz eines Selenelements in Python
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
[Hinweis] Zu überprüfende Punkte, wenn in pyenv eine Endlosschleife auftritt
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Die erste künstliche Intelligenz. So überprüfen Sie die installierte Version von Tensorflow.
[Anfängernotiz] So legen Sie den Lesepfad der Bibliothek in Python fest
[Frage] Bei der zufälligen Waldregression von sk-learn tritt ein Fehler auf, wenn die Anzahl der Parallelen auf -1 gesetzt wird.
Überprüfen Sie die Anzahl der Primzahlen kleiner oder gleich n
[Python] So legen Sie die Position und Größe der Fensteranzeige von matplotlib fest
So überprüfen Sie die lokale GAE über den iPhone-Browser im selben LAN
So ermitteln Sie die Anzahl der CPUs ohne den Befehl sar
So geben Sie eine .ui-Datei in der Dialog- / Widget-GUI in PySide an
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
So vergleichen Sie, ob der Inhalt der Objekte in scipy.sparse.csr_matrix identisch ist
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
So spielen Sie ein Video ab, während Sie die Anzahl der Bilder ansehen (Mac)
Ein Beispiel für die Antwort auf die Referenzfrage der Studiensitzung. Mit Python.
Überprüfen Sie das Verhalten des Zerstörers in Python
Die Geschichte eines Fehlers in PyOCR
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
So überprüfen Sie die Version von opencv mit Python
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
Entspricht die Zahl einer Ganzzahl?
So legen Sie ein nicht geprüftes Ziel in Flake8 fest
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Verarbeitung (Python) Diagramm der Koordinaten der Liste Geben Sie an, wie oft in draw ()
So identifizieren Sie die Zugriffsquelle in der generischen Klassenansicht von Django eindeutig
Legen Sie die Obergrenze für die Anzahl der Wiederholungen rekursiver Funktionen in Python fest