Python atau bukan Python

Saya akan berbicara tentang masalah yang saya temui ketika memilih Python3 sebagai bahasa pertama.
Saya tidak belajar pemrograman di universitas.
Saya tidak ingin memulai Holywar.

Pada 2016, Google menyarankan untuk belajar Python3 jika diperlukan:

1. Bahasa awal yang mudah.
2. Bahasa untuk pembelajaran mesin.
3. Bahasa untuk game 2d sederhana.

1. Saya menonton kuliah pertama kursus Harvard CS50 di situs JavaRush dan menyadari bahwa saya tidak ingin:

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

Kapan Anda bisa melakukan ini:

 print('Monty Python') 

JavaScript takut kombinasi tiga sistem: JS / HTML / CSS.

2. Pembelajaran mesin menginspirasi semua artikel dan contoh untuk menyerupai cyberpunk dan fiksi ilmiah.

3. Bisakah saya memprogram permainan? Hebat!

Saya mengimpor ini, menghargai filosofi Python, dan mulai membaca buku Michael Dawson, Programming Python. Tiga minggu setelah "Hello World!" Saya menulis klon game Life dengan antarmuka GUI . Saya jatuh cinta pada Python dan ketika kesulitan mulai, saya berpikir bahwa saya tidak cukup tahu dan menulis algoritma yang buruk.

Kecepatan

Saya menggunakan tkinter dan menggambar persegi panjang untuk membuat sel.
Bidang 800x640. Ukuran sel adalah 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) 



Ladang sekecil itu tidak punya waktu untuk terisi penuh. Sekitar 600 sel diperbarui dengan cepat, tetapi segera setelah saya mengurangi ukuran sel menjadi 4, tingkat perubahan dalam keadaan sel dan respons antarmuka menurun.

Saya menghapus kelas Square dan mulai menggambar piksel dari gambar. Antarmuka bekerja dengan baik, tetapi setelah 200 sel semuanya diperbarui dengan sangat lambat. Saya menemukan masalah dalam algoritma. Gambar sel 4 piksel lebih lambat dari 1 piksel.

 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)) 

Setelah koreksi, saya mendapat 600 sel dengan kecepatan normal dan angka yang sangat kecil di layar. Saya berhasil membawa kecepatan ke 900 sel ketika saya berhenti memeriksa gambar untuk "piksel hitam" dan mulai menyimpan keadaan sistem dalam matriks.

 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)) 

Saya memasang pygame, memigrasikan algoritme, dan mendapat 9000 sel dengan 4 fps. Tapi game berjalan lebih cepat, dan tidak hanya ada titik di layar.
Saya mulai curiga bahwa itu masalah bahasa.
Saya mencoba Cython. Sistem 30.000 sel diperoleh pada 4 fps.



Saya tidak ingin C, tetapi saya mendapat C.

Bagaimana cara mengemas portabilitas ke komputer lain?

Saya berurusan dengan ini menggunakan py2app, tetapi masih tidak mengerti cara kerjanya.

Perpustakaan standar dan modul pihak ketiga

Saya tidak berhasil mengevaluasi ini. Saya terus-menerus menginstal sesuatu yang lain dan, kadang-kadang, modul tidak mau bekerja satu sama lain. Saya punya tiga vvs untuk kemasan aplikasi terpisah dengan tkinter, tkinter + bantal dan pygame. Saya mencari di folder paket situs dan tidak tahu apa itu tergantung dan mengapa itu ada di sana. Saya tidak menulis modul saya. Saya sudah siap.

Secara umum, saya melewati ini dan menginginkan kesederhanaan.
Bahasa yang bisa dilihat.

Saya memilih Lua. Untuk beberapa alasan, saya memilih bahasa lain dengan sintaks yang tidak terlalu dikenal :-)

Kecepatan

Saya membuat Life on Lua + Love2d. Saya hanya menggunakan fungsi bahasa dan mesin.

 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 

Dengan 111735 sel hidup, sistem beroperasi pada 18 fps.



Bagaimana cara mengemas portabilitas ke komputer lain?

Saya menulis skrip pada Lua + Love2d untuk mengemas aplikasi untuk MacOS dan Windows. Ya, ada instruksi di situs tersebut , tetapi sekarang bagi saya proses ini bukan sebagai "sihir" seperti dengan py2app.

Perpustakaan standar kecil

Saya melewatkan fungsi Python yang biasa: memetakan, memfilter, mengurangi, jangkauan dan harus membuat perpustakaan fungsional. Tidak ada kelas di Lua, tapi saya membaca cara menambahkannya ke bahasa dan lebih memahami bagaimana kelas bekerja dengan Python. Hanya dengan Lua aku suka penutupan dan generator.

Ketika saya mencoba semua fungsi perpustakaan standar dan sepertiga fungsi dari modul untuk berinteraksi dengan bahasa C, saya memiliki gagasan umum tentang bahasa tersebut. Ini adalah perasaan yang sangat menyenangkan. Lua tampaknya menjadi tempat yang baik untuk memulai, tetapi bahasanya tidak populer.

Jika saya dapat memilih kembali bahasa pertama, maka saya akan mulai dengan JavaScript.
Mengapa

1. Bahasa ini berjalan di browser.
2. Populer.
3. Mengenal web.
4. JavaScript + pixi.js dan game Life akan bekerja tanpa masalah.

Dan Python, saya akan belajar bersama dengan algoritma pembelajaran mesin.

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


All Articles