Python还是Python

我将讨论选择Python3作为第一语言时遇到的问题。
我没有在大学学习程序设计。
我不想开始圣战。

在2016年,Google建议在需要时学习Python3:

1.易于入门的语言。
2.机器学习语言。
3.简单2D游戏的语言。

1.我在JavaRush网站上观看了哈佛CS50课程的第一堂课,并且意识到我不想:

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

当您可以这样做时:

 print('Monty Python') 

JavaScript害怕将三个系统结合在一起:JS / HTML / CSS。

2.机器学习启发了所有类似于计算机朋克和科幻小说的文章和示例。

3.我可以编写游戏程序吗? 太好了!

我确实导入了该文件,赞赏Python的原理,然后开始阅读Michael Dawson的书《 Programming Python》。 在“ Hello World!”发布三周后,我编写了一个具有GUI界面的Life游戏副本。 我爱上了Python,当困难开始时,我以为我不够了解并编写了错误的算法。

速度

我使用tkinter并绘制了矩形来创建单元格。
栏位800x640。 像元大小为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) 



如此小的领域没有时间完全填补。 大约600个单元被快速更新,但是当我将单元大小减小到4时,单元状态的变化率和接口的响应就下降了。

我删除了Square类,并开始从图像中绘制像素。 界面工作正常,但是经过200个单元后,所有内容的更新速度都很慢。 我在算法中发现了一个问题。 绘制一个比1像素慢4像素的像元。

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

经过更正后,我以正常速度得到了600个单元,并且屏幕上的数字很小。 当我停止检查图像中的“黑色像素”并开始将系统状态存储在矩阵中时,我设法将速度提高到900个单元。

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

我安装了pygame,迁移了算法,并以4 fps的速度获得了9000个单元格。 但是游戏的运行速度更快,而且屏幕上不仅有点。
我开始怀疑这是语言问题。
我尝试过Cython。 30,000个单元格的系统以4 fps的速率获得。



我不想要C,但是我得到了C。

如何打包以携带到另一台计算机?

我使用py2app处理了这个问题,但仍然不了解它是如何工作的。

标准库和第三方模块

我没有对此进行评估。 我不断地安装其他东西,有时,这些模块不想互相配合。 我用tkinter,tkinter +枕头和pygame分别包装了三个venvs。 我查看了site-packages文件夹,但不知道它所依赖的内容以及为什么它位于其中。 我没有编写模块。 我正在准备。

总的来说,我经历了这个并希望简单。
可以看到的语言。

我选择了Lua。 由于某种原因,我选择了另一种语法不太熟悉的语言:-)

速度

我在Lua + Love2d上生活。 我只是使用了语言和引擎功能。

 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 

该系统具有111735个活细胞,以18 fps的速度运行。



如何打包以携带到另一台计算机?

我在Lua + Love2d上编写了脚本,以打包MacOS和Windows的应用程序。 是的,该站点上有一条说明,但是现在对我来说,此过程不像py2app那样“神奇”。

小型标准库

我错过了常规的Python函数:映射,过滤,缩小,范围,并且不得不创建一个函数库。 Lua中没有类,但是我阅读了如何将它们添加到语言中,并更好地理解了类在Python中的工作方式。 只有Lua才喜欢闭包和生成器。

当我尝试标准库的所有功能以及模块中与C语言进行交互的功能的三分之一时,我对该语言有了一个大致的了解。 这是一种非常愉快的感觉。 Lua似乎是一个不错的起点,但是这种语言并不流行。

如果我可以重新选择第一语言,那么我将从JavaScript开始。
怎么了

1.该语言在浏览器中运行。
2.受欢迎。
3.了解网络。
4. JavaScript + pixi.js和“生活”游戏将正常运行。

和Python,我将与机器学习算法一起学习。

Source: https://habr.com/ru/post/zh-CN478928/


All Articles