Python ist schmerzhaft. Aber benutze

Ich schreibe Python seit einem Jahr für eine Weile. (Nicht WEB-System)

Lassen Sie uns einige der Vorteile und Schmerzen von Python auflisten, die ich gesehen habe (Sabo). Es ist ein Memo für mich, also eine gute Idee ... Bitte weisen Sie darauf hin.

Für Google Sensei führen Sie diesen Artikel bitte nicht oben in den Suchergebnissen auf, da er nur die Suche verschmutzt. Ich werde alles tun (ich sage nichts).

TL;DR

Python hat viele schmerzhafte Spezifikationen (für mich).

Selbst wenn wir die Nachteile akzeptieren, gibt es Vorteile, die wir gerne nutzen würden. Ich denke, wir haben keine andere Wahl, als Python weiter zu verwenden.

Python ist schwer

Die Blockspezifikationen sind schmerzhaft

Wie Sie wissen, ist Python-Einrückung sinnvoll. Der Block besteht aus Einrückungen.

Mit anderen Worten, dies

if True:
   print("hoge")
else:
   print("piyo")
print("fuga")
# =>Hoge und Fuga werden angezeigt

Und das

if True:
   print("hoge")
else:
   print("piyo")
   print("fuga")
# =>hoge wird angezeigt

Die angezeigten Inhalte sind unterschiedlich.

……Ich kenne. Ich weiß, dass es für selbstverständlich gehalten wird. Aber denk darüber nach. Dies

if xxx:
   lorem
   if yyy:
      ipsum
      dolar
else:
   sit

Und das

if xxx:
   lorem
   if yyy:
      ipsum
      dolar
   else:
      sit

Der einzige Unterschied ist das Einrücken. Wenn Sie eine automatische Einrückungsfunktion wie Emacs verwenden, ändert sich die Struktur je nach Editor. Findet jemand das ziemlich schmerzhaft?

Was? Schreiben Sie alle den richtigen Code auf einmal? Das kann ich nicht machen Ich schreibe eine Funktion in einer bestimmten Menge, aber das ist eine Klasse, oder? Sie können das Ganze einrücken Danach werden verschiedene interne Einrückungen korrigiert. Wenn Sie nur umziehen möchten, müssen Sie natürlich nur die erforderliche Anzahl von Leerzeichen am Zeilenanfang hinzufügen, damit dies möglich ist. Wenn es jedoch C usw. ist, wird ein unnötiger Schritt eingeklemmt und das Denken hört auf. Ich denke, das ist ein lächerlicher Nachteil.

Abgesehen davon versuche ich nicht immer, Sie zu zwingen, es in mittlere Klammern zu setzen, aber es ist möglicherweise möglich, dies als Option zu tun.

Importspezifikationen sind schmerzhaft

In Python werden Importe häufig am Anfang einer Zeile angeordnet, aber der Suchpfad ist derzeit schwierig.

Es kann schwierig sein, sich zu entscheiden, da es keine Standardstruktur für das Projekt gibt (nun, es ist eine Skriptsprache und dies ist unvermeidlich). Es ist jedoch NG, dass sich der Suchpfad abhängig davon ändert, wie er aufgerufen wird.

Schließlich müssen Sie zur Beruhigung sys.path bearbeiten und im aktuellen Verzeichnis hinzufügen.

Dies liegt in meiner Verantwortung, aber jedes Mal, wenn ich diese Aufgabe vergesse und nach Möglichkeiten suche, wie ich sie verbessern kann.

Die Existenz von Karte und Filter ist schmerzhaft

Python verfügt über Karten und Filter, die von funktionalen Sprachen abgeleitet sind. Es kann an Klassen angepasst werden, die iterable implementieren, und funktioniert wie der Name schon sagt.

lst: list = [1, 2, 3, 4, 5, 6]
lst2 = list(map(lambda x: x*2, lst))
lst3 = list(filter(lambda x: x % 2 == 0, lst))
print(lst2) # => [2, 4, 6, 8, 10, 12]
print(lst3) # => [2, 4, 6]

Hast du bemerkt? Ich konvertiere absichtlich die Ausgabe wie Karte in Liste. Nun, das ist nicht schmerzhaft, aber es fühlt sich subtil an. Schließlich ist die einzige Bedingung, dass "Lambda x: iterable-> iterable", also ist es der Ausgabetyp der Karte, der iterierbar ist, so dass es unvermeidlich ist, dass eine Konvertierung erforderlich ist.

In der Realität hat es jedoch eine praktische Funktion, die als Einschlussnotation bezeichnet wird. Gleiches wie oben

lst: list = [1, 2, 3, 4, 5, 6]
lst2 = [x * 2 for x in lst]
lst3 = [x for x in lst if x % 2 == 0]
print(lst2) # => [2, 4, 6, 8, 10, 12]
print(lst3) # => [2, 4, 6]

Kann geschrieben werden.

Scheibe ist scharf

Es scheint, dass Python nicht verwendet wird, indem die virtuelle Umgebung für jedes Projekt abgeschnitten wird. Daher verwende ich Pyenv, um Versionen zu wechseln, und pipenv, um Bibliotheken für jede Umgebung zu wechseln.

Das Problem ist, dass in diesem Fall die Festplatte immer mehr verzehrt wird, z. B. eine Bibliothek für jede virtuelle Umgebung.

Ich verwende M.2 SSD mit Priorität auf Geschwindigkeit, und selbst wenn es billig ist, ist es in einer Umgebung von etwa 250 GB nüchtern.

Diesbezüglich ist es kein Problem für diejenigen, die sich immer in der Umwelt zurückziehen, wie Anaconda und Miniconda und Jupyter.

Python ist gut

Reichhaltige Bibliothek

Finden Sie heraus, was Sie tun möchten-> Es gibt viele Muster, in denen Sie eine Bibliothek finden können. Um ehrlich zu sein, denke ich, dass die meisten Dinge eine Bibliothek haben.

Da ich in einem natürlichen Sprachsystem lebe, verwende ich manchmal MeCab, Human ++ usw., aber da es Wrapper für sie gibt, Es kann als Python-Objekt verwendet werden, ohne an irgendetwas zu denken. Praktisch.

Wenn es sich um einen morphologischen Analysator handelt, können Sie ihn dennoch selbst implementieren. Dies ist jedoch sehr hilfreich, da Sie keinen Wrapper für einen Syntaxanalysator wie KNP verwenden möchten.

Gibt es auch eine Nachfrage nach einer Konvertierung in voller Breite und halber Breite? Es entspricht auch dem, so dass ich es lösen kann, indem ich verschiedene Bibliotheken aufrufe, die von meinen Vorgängern erstellt wurden.

Die Bibliothek für maschinelles Lernen ist besonders umfangreich. Wenn Sie dies tun möchten, ist Python eine gute Idee.

Numpy,Pandas

Eine Bibliothek, die ein Grund sein kann, Python selbst zu verwenden. Matrixberechnung ist zu stark ... Es ist zu einfach grafisch darzustellen ...

Umgebung kann isoliert werden

Da es in einer virtuellen Umgebung ausgeführt werden kann, müssen Sie sich beim Ausführen des erstellten Programms keine Gedanken über die Version von Glibc machen. gut. gut.

Ich benutze Arch Linux jetzt persönlich, also ist es noch besser.

Trotzdem verwenden wir Python

Ich habe mich oben viel beschwert, aber am Ende sind die Vorteile so groß, dass wir Python nicht verlassen können. Ich denke, wenn Numpy auch in anderen Sprachen ist ... aber ich fühle mich nicht wie Ruby oder Perl, also Python ist auch ein Kandidat als bequeme Skriptsprache.

Ich frage mich, ob es keine andere Wahl gibt, als es zu verwenden, während die durch das Design gelösten Probleme gelöst werden ...

Referenz

Recommended Posts

Python ist schmerzhaft. Aber benutze
Verwenden Sie Stoff wie in Python (Stoff3)
Python ist einfach
Was ist Python?
Python ist eine Instanz
Verwendung ist und == in Python
Was ist Python?
Python Int ist unendlich
Verwenden Sie thingspeak aus Python
Verwenden Sie config.ini mit Python
[Python] Verwenden Sie JSON mit Python
Verwenden Sie fließend Python
Verwenden Sie Datumsangaben in Python
[Python] Was ist Pipeline ...
Verwenden Sie Valgrind mit Python
Verwenden Sie MySQL aus Python
Verwenden Sie Mecab mit Python 3
Verwenden Sie LiquidTap Python Client ③
Verwenden Sie DynamoDB mit Python
Verwenden Sie Python 3.8 mit Anaconda
Methodische Verwendung im [Python] -Format
Verwenden Sie Python mit Docker
Verwenden Sie MySQL aus Python
Verwenden Sie LiquidTap Python Client ②
Verwenden Sie BigQuery aus Python.
Verwenden Sie den Profiler in Python
[Python] Was ist virtualenv?
Verwenden Sie mecab-ipadic-neologd von Python
Verwenden Sie LiquidTap Python Client ①
Betreff: Python Lambda ist nutzlos ^ H ^ H ^ H ^ H ^ H Schwer zu bedienen
Mal sehen, wie def in Python verwendet wird
Lassen Sie uns Python Janome einfach verwenden
Python-Runde ist nicht streng rund
[Python] Effizienteres Debuggen!
Verwenden Sie die Trello-API mit Python
Verwenden Sie matplotlib unter Ubuntu 12 und Python
Verwenden Sie den let-Ausdruck in Python
Verwenden Sie das Messprotokoll mit Python
python3: Verwendung der Flasche (2)
Verwendung von __dict__ in Python
Verwenden Sie die Rückruffunktion in Python
Verwenden Sie die Twitter-API mit Python
Verwenden Sie den Parameterspeicher in Python
[Python] Verwenden Sie eine Zeichenfolgenfolge
[Python] Verwendung von Liste 1
Verwenden Sie den HTTP-Cache in Python
Verwenden Sie TUN / TAP mit Python
Verwenden Sie MySQL von Anaconda (Python)
Python ist eine Sprache für Erwachsene
Verwenden Sie in Python ein Diktat mit Listenschlüssel
Wie benutzt man Python Argparse?
Verwenden Sie Random Forest mit Python
Verwenden Sie Spyder von Python IDE
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Python] Python und Sicherheit - is Was ist Python?
Schnellerer Python-Release-Zyklus!
[Python] Ist das null, aber nicht leere Objekt wahr oder falsch?