Tipps zum Erstellen kleiner Werkzeuge mit Python

Hier sind einige Tipps, die Sie bei der Herstellung Ihrer eigenen kleinen Werkzeuge beachten sollten.

Wenn Sie anfangen zu schreiben, wenn Sie denken "Ich werfe es trotzdem weg" und anfangen zu schreiben, wird es für eine lange Zeit oder an verschiedenen Orten verwendet. Wenn Sie also vorsichtig sind, wird es später einfacher. Ich denke, es gibt einen anderen Weg, um groß angelegte Software zu entwickeln.

Machen Sie die Hauptroutine zu einer Funktion

Der Funktionsname kann alles sein, aber als Hobby bereite ich eine Funktion namens "main ()" vor und schreibe dort alle Hauptroutinen.

#!/usr/bin/env python

def main():
    print('hello, hello, hello!')

if __name__ == '__main__': main()

Wenn Sie sich den kleinen Beispielcode von Python ansehen, wird der Ausführungscode außerhalb der Funktion in Solid geschrieben. Natürlich funktioniert es immer noch, aber die folgenden zwei Punkte können später problematisch sein.

  1. Es ist voll von globalen Variablen und das Management kann nicht mithalten: Wenn Sie mit "Es ist sowieso ein kleines Skript" beginnen, verlieren Sie nach und nach den Überblick darüber, wo und welchen Variablennamen Sie verwenden, auch wenn Sie zunächst eine gute Sicht haben. Wenn Sie der Meinung sind, dass es sich um ein besonders kleines Skript handelt und Sie Variablennamen lose angeben, können Sie versehentlich denselben Variablennamen für einen anderen Zweck verwenden.
  2. Es wird ausgeführt, wenn von außen gelesen wird: Wenn Sie die in diesem Code definierte Klasse außerhalb verwenden möchten, wenn Sie von außen mit der Anweisung "import" usw. lesen, wird der Teil außerhalb der Funktion ausgeführt Es wird enden. Sie können einen solchen Teil später in eine Funktion einschließen, aber Sie können auch einen Teil einschließen, der zum Debuggen global ausgeführt werden muss (z. B. die Definition einer als Konstante verwendeten globalen Variablen). Es dauert in der Regel viel Zeitverschwendung

Um dies zu verhindern, verschieben Sie die gesamte Verarbeitung einschließlich der Variablen in "main ()" und geben Sie eine bedingte Anweisung "name ==" __ main __ "ein, damit die Hauptroutine nicht ausgeführt wird, wenn sie von außen gelesen wird. Es ist.

Verwalten Sie die Ausführungsumgebung mit virtualenv

$ pip install virtualenv
$ virtualenv venv
$ source venv/bin/activate

virtualenv ist ein bekanntes Tool zur Trennung von Ausführungsumgebungen in Python. Es gibt verschiedene Erklärungsartikel zur Verwendung von virtualenv. Bitte beziehen Sie sich auf diese, aber ich versuche, virtualenv so oft wie möglich zu verwenden, auch wenn Sie kleine Tools erstellen. Die Gründe sind wie folgt.

  1. (In seltenen Fällen) Ich wechsle manchmal zwischen Python2 und Python3 hin und her, daher möchte ich sicherstellen, dass es für jedes Projekt mit einer festen Version funktioniert.
  2. Stellen Sie sicher, dass Sie das im Projekt verwendete Paket kennen. Wenn Sie die Liste der Spezifikationspakete als "pip freeze> require.txt" speichern können, indem Sie sie nicht mit der gesamten Umgebung mischen, können Sie in eine andere Umgebung wechseln (z. B. einen Server, der die ganze Nacht über Analysen von Ihrem PC sendet). Beim Bewegen glatt sein

Verwalten Sie Parameter mit argparse

Wenn Sie ein Wegwerfwerkzeug oder -skript schreiben, haben Sie möglicherweise eine feste Variable, um einen festen Wert zu übergeben. Verwenden Sie jedoch nach Möglichkeit argparse, um ihn über die Befehlszeile abzurufen.

#!/usr/bin/env python

import argparse

def main():
    #Parser erstellen
    psr = argparse.ArgumentParser()
    # -w / --Eine Option namens Wort wurde hinzugefügt. Der Standardwert ist'hello! '
    psr.add_argument('-w', '--word', default='hello! ')
    # -s / --Es wurde eine Option namens Größe hinzugefügt. Der Standardwert ist 5 und der Typ ist int
    psr.add_argument('-s', '--size', default=5, type=int)
    #Analysieren Sie Befehlszeilenargumente und setzen Sie sie in Argumente. Beenden Sie, wenn ein Fehler auftritt
    args = psr.parse_args()
    print(args.word * args.size)

if __name__ == '__main__': main()

Es ist sicherlich ein bisschen langweilig im Vergleich zum Schreiben von Variablen, aber wenn Sie andererseits mit Parametern herumspielen oder die Datei ändern müssen, um Daten zu lesen, können Sie mit Befehlszeilenargumenten = Code selbst angeben Sie müssen sich nicht damit anlegen, daher ist es sehr praktisch für Versuch und Irrtum. Wenn Sie einen Wert für "Standard" angeben, müssen Sie ihn nicht einzeln angeben.

> python t3.py -s 6
hello! hello! hello! hello! hello! hello!
> python t3.py -s 2
hello! hello!
> python t3.py -w 'hoge '
hoge hoge hoge hoge hoge

Fortschritt mit tqdm anzeigen

Wie weit ist es jetzt, wenn Sie auf die Verarbeitung warten, indem Sie zehntausende Male mit der for-Anweisung wiederholt werden? Ich würde Code wie "if i% 1000 == 0: print ('now =', i)" schreiben, weil ich das bestätigen wollte, aber die Bibliothek dafür zu verwenden ist einfacher und umfangreicher. Sie können Informationen erhalten. Persönlich benutze ich eine Bibliothek namens "tqdm".

#!/usr/bin/env python

from tqdm import tqdm
import time

def main():
    for i in tqdm(range(100)):
        time.sleep(0.02)

if __name__ == '__main__': main()

tqdm.gif

Auf diese Weise können Sie sehen, wie viele Fälle jetzt verarbeitet wurden, wie viele Fälle pro Sekunde verarbeitet wurden und wenn das Ende bekannt ist, wie viel Prozent verarbeitet wurden. Es ist einfach zu bedienen, da es den Iterator nur wie "tqdm (iter (...))" umgibt.

Bereiten Sie eine zu protokollierende Funktion vor

Beim Schreiben eines kleinen Skripts werden der Fortschritt der Verarbeitung und das Ergebnis gedruckt gedruckt. Ich wollte es jedoch in eine Datei schreiben, falls ich die Zeit in der Mitte eingeben oder das Ergebnis in die Standardausgabe fließen lassen wollte. Ich werde kommen. Ursprünglich mag es eine gute Idee sein, das "Protokollierungs" -Modul zu verwenden, aber im Fall eines Skripts, das Sie selbst schreiben, ist es schneller und es kann effektiv sein, es selbst zu schreiben, also das folgende "log ()" In vielen Fällen wird eine Funktion wie `vorbereitet.

t5.py


#!/usr/bin/env python

import datetime

def log(*args):
    msg = ' '.join(map(str, [datetime.datetime.now(), '>'] + list(args)))
    print(msg)
    with open('log.txt', 'at') as fd: fd.write(msg + '\n')

def main():
    log('generated', 5, 'items')

if __name__ == '__main__': main()
$ python t5.py
2017-09-04 12:39:38.894456 > generated 5 items
$ cat log.txt
2017-09-04 12:39:38.894456 > generated 5 items

abschließend

Die Tipps des Typs, der in den Code geschrieben werden soll, sind in gist zusammengefasst.

Wenn Sie andere Tricks wie "Es gibt solche Tricks!" Haben, lassen Sie es mich bitte wissen.

Recommended Posts

Tipps zum Erstellen kleiner Werkzeuge mit Python
Tipps zum Umgang mit Binärdateien in Python
Refactoring-Tools, die mit Python verwendet werden können
Tipps zum Erreichen der ATND-API mit Python
[Python + Selen] Tipps zum Scraping
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Über "für _ in range ():" von Python
Tipps zum Codieren kurz und einfach in Python zu lesen
Überprüfen Sie Python auf Speicherlecks
Suchen Sie mit Python nach externen Befehlen
[TouchDesigner] Tipps für die Anweisung von Python
Tipps zum Aufrufen von Python von C.
Führen Sie unittest in Python aus (für Anfänger)
Python-Tipps
Python-Tipps
Python-Tipps
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Inject wird für DDD in Python empfohlen
Windows → Linux Tipps zum Einbringen von Daten
Geben Sie Anmerkungen für Python2 in Stub-Dateien ein!
Vorlage zum Schreiben von Batch-Skripten in Python
Verarbeiten Sie mehrere Listen mit for in Python
MongoDB mit Python zum ersten Mal
Holen Sie sich ein Zeichen für Conoha mit Python
Beispiel für den Umgang mit EML-Dateien in Python
Tipps zum Erstellen eines interaktiven Bots mit LINE
Tipps zum Erstellen großer Anwendungen mit Flask
AtCoder Spickzettel in Python (für mich)
Ich habe mit Python nach einer Primzahl gesucht
Hinweise zur Verwendung von Python (Pydev) mit Eclipse
Installationshandbuch für Python Tools für Visual Studio
Verwenden Sie pathlib in Maya (Python2.7), um sich auf das kommende Python3.7 vorzubereiten
2016-10-30 sonst für Python3> für:
Python Conda Tipps
[Tipps] Leicht lesbares Schreiben beim Verbinden von Funktionen in Python
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python
Quadtree in Python --2
Python in der Optimierung
Python [für mich]
CERTIFICATE_VERIFY_FAILED in Python 3.6, dem offiziellen Installationsprogramm für macOS
Metaprogrammierung mit Python
++ und-können nicht zum Inkrementieren / Dekrementieren in Python verwendet werden
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Tipps zur Verwendung von Realsense SR300 auf einem MacBook im Jahr 2020
Schritte, um dlib in Python Tools für Visual Studio einzufügen und Spaß zu haben
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Tipps zum Python-Debuggen
Epoche in Python
Zwietracht in Python
Python-Klick-Tipps
Fügen Sie ein Zitat ">" für die Beantwortung von E-Mails in Python3 hinzu
Deutsch in Python
nCr in Python
Unerwartet (?) Python Bean Wissen