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.
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.
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.
$ 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.
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
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()
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.
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
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