Python oder nicht Python

Ich werde auf die Probleme eingehen, die bei der Auswahl von Python3 als erste Sprache aufgetreten sind.
Ich habe an der Universität kein Programmierstudium absolviert.
Ich möchte nicht mit Holywar anfangen.

Im Jahr 2016 empfahl Google, Python3 bei Bedarf zu lernen:

1. Einfach zu startende Sprache.
2. Sprache für maschinelles Lernen.
3. Sprache für einfache 2D-Spiele.

1. Ich habe die erste Vorlesung des Harvard CS50-Kurses auf der JavaRush- Website gesehen und festgestellt, dass ich Folgendes nicht wollte:

#include <stdio.h> int main(int argc, const char *argv[]) { printf("Hello world\n"); return 0; } 

Wann können Sie dies tun:

 print('Monty Python') 

JavaScript erschreckte eine Kombination aus drei Systemen: JS / HTML / CSS.

2. Maschinelles Lernen inspirierte alle Artikel und Beispiele dazu, Cyberpunk und Science-Fiction zu ähneln.

3. Kann ich die Spiele programmieren? Großartig!

Ich importierte dies, schätzte die Philosophie von Python und las Michael Dawsons Buch Programming Python. Drei Wochen nach „Hello World!“ Habe ich einen Klon von Life's Game mit einer GUI- Oberfläche geschrieben. Ich habe mich in Python verliebt und als die Schwierigkeiten begannen, dachte ich, ich wüsste nicht genug und schreibe schlechte Algorithmen.

Geschwindigkeit

Ich habe tkinter verwendet und Rechtecke gezeichnet, um Zellen zu erstellen.
Feld 800 x 640. Die Zellengröße beträgt 10x10.

 class Square(object): def __init__(self, canvas, x, y, size, main): self.canvas = canvas self.cel = self.canvas.create_rectangle(x, y, x + size, y + size, fill='#EEEEEE') self.main = main self.color_change = True self.canvas.tag_bind(self.cel, '<ButtonPress-1>', self.paint) 



Solch ein kleines Feld hatte keine Zeit, sich vollständig zu füllen. Ungefähr 600 Zellen wurden schnell aktualisiert, aber sobald ich die Zellengröße auf 4 reduzierte, sanken die Änderungsrate des Zellenzustands und die Reaktion der Schnittstelle.

Ich habe die Square-Klasse entfernt und begonnen, Pixel aus dem Bild zu zeichnen. Das Interface hat gut funktioniert, aber nach 200 Zellen wurde alles sehr langsam aktualisiert. Ich habe ein Problem im Algorithmus gefunden. Zeichnen Sie eine Zelle mit 4 Pixeln, die langsamer als 1 Pixel ist.

 def fill_black(self, x, y, color): for i in range((-self.cell // 2) - 1, (self.cell // 2) - 1): for j in range((-self.cell // 2) - 1, (self.cell // 2) - 1): xx = (x + i) % self.can_width yy = (y + j) % self.can_height self.cell_matrix.put(color, (xx, yy)) 

Nach Korrekturen wurden 600 Zellen mit normaler Geschwindigkeit und sehr kleinen Zahlen auf dem Bildschirm angezeigt. Ich schaffte es, die Geschwindigkeit auf 900 Zellen zu bringen, als ich aufhörte, das Bild auf „schwarze Pixel“ zu prüfen und den Status des Systems in der Matrix zu speichern.

 def fill_black(self, coords, color, virt_color): x, y = coords self.virt_mat[x][y] = virt_color self.cell_matrix.put(color, (x, y)) 

Ich habe Pygame installiert, den Algorithmus migriert und 9000 Zellen mit 4 fps erhalten. Spiele laufen jedoch schneller und es werden nicht nur Punkte auf dem Bildschirm angezeigt.
Ich begann zu vermuten, dass es eine Frage der Sprache war.
Ich habe es mit Cython versucht. Ein System von 30.000 Zellen mit 4 fps.



Ich wollte nicht C, bekam aber C.

Wie packe ich für die Portabilität auf einen anderen Computer?

Ich habe mich mit py2app darum gekümmert, aber immer noch nicht verstanden, wie es funktioniert.

Standardbibliothek und Module von Drittanbietern

Ich habe es nicht geschafft, dies zu bewerten. Ich habe ständig etwas anderes installiert und manchmal wollten die Module nicht miteinander arbeiten. Ich hatte drei Venvs für separate Anwendungsverpackungen mit tkinter, tkinter + pillow und pygame. Ich habe im site-packages-Ordner nachgesehen und wusste nicht, worauf es ankommt und warum es dort liegt. Ich habe meine Module nicht geschrieben. Ich sah fertig aus.

Im Allgemeinen habe ich dies durchlaufen und wollte Einfachheit.
Eine Sprache, die gesehen werden kann.

Ich habe mich für Lua entschieden. Aus irgendeinem Grund habe ich eine andere Sprache mit einer nicht ganz vertrauten Syntax gewählt :-)

Geschwindigkeit

Ich habe das Leben auf Lua + Love2d gemacht. Ich habe gerade die Sprach- und Motorfunktionen verwendet.

 function Life:draw() love.graphics.setCanvas(self.canvas) love.graphics.clear() for y=1,self.rows do for x=1,self.cols do if self.cells[y][x]==1 then love.graphics.setColor(self.color) love.graphics.points(x-1,y-1) end end end love.graphics.setCanvas() love.graphics.setColor(set.WHITE) love.graphics.draw(self.canvas,self.x,self.y) end 

Mit 111735 lebenden Zellen arbeitet das System mit 18 fps.



Wie packe ich für die Portabilität auf einen anderen Computer?

Ich habe Skripte auf Lua + Love2d geschrieben, um Anwendungen für MacOS und Windows zu verpacken. Ja, es gibt eine Anleitung auf der Seite , aber jetzt ist dieser Prozess für mich nicht so "magisch" wie bei py2app.

Kleine Standardbibliothek

Ich habe die üblichen Python-Funktionen vermisst: Map, Filter, Reduce, Range und musste eine funktionale Bibliothek erstellen. Es gibt keine Klassen in Lua, aber ich lese, wie man sie der Sprache hinzufügt, und verstehe besser, wie Klassen in Python funktionieren. Nur mit Lua mochte ich Verschlüsse und Generatoren.

Als ich alle Funktionen der Standardbibliothek und ein Drittel der Funktionen der Module für die Interaktion mit der C-Sprache ausprobiert habe, hatte ich eine allgemeine Vorstellung von der Sprache. Das ist ein sehr angenehmes Gefühl. Lua scheint ein guter Anfang zu sein, aber die Sprache ist nicht beliebt.

Wenn ich die erste Sprache erneut auswählen könnte, würde ich mit JavaScript beginnen.
Warum?

1. Die Sprache läuft in Browsern.
2. Beliebt.
3. Das Web kennenlernen.
4. JavaScript + pixi.js und das Spiel Life funktionieren ohne Probleme.

Und Python würde ich zusammen mit Algorithmen für maschinelles Lernen lernen.

Source: https://habr.com/ru/post/de478928/


All Articles