33岁,因为无聊,他写下了Python

8月28日,Python首部纪录片登陆YouTube,完整呈现了这门编程语言从一个小项目,成长为驱动AI与数据科学的强大工具的传奇历程。

纪录片的评论区出现动人一幕,不少程序员在Guido van Rossum(吉多·范罗苏姆)的留言下集体致谢,向这位Python之父表达敬意。

而镜头之外,这位Python之父的人生剧本,竟与他创造的语言如此相似,同样充满波折。

Python诞生前,Guido曾在一个冷门的分布式系统项目里“憋”了好几年。更早一些,他在大学时还一度因为过度沉迷于编程而险些无法毕业。这些坎坷经历,恰恰塑造了这位在后来影响世界的Python之父。

Part.1

过度沉迷于编程而险些无法毕业

1956 年,Guido出生于荷兰,他对计算机的迷恋始于6岁时。他的父亲是一名数学家,有一次带了一台电脑回家工作,年轻的吉多立马被它的功能迷住了。到了十几岁,他就已经能熟练使用 BASIC 和 Pascal 等语言。1974年,18岁的Guido考入大学攻读数学专业,但依旧热爱编程。

1977年,他获得了一份在学校大型计算机操作系统小组的兼职工作。这份工作让他获得了无限制的上机时间,并能直接访问计算机的源代码,还能与专业的程序员同事讨论问题。这对于他来说简直是天堂。

然而,这份快乐带来了“副作用”:他几乎将全部时间和精力都投入到编程中,经常逃课,并忽视了自己的正式学业。这种状态持续了相当长的一段时间,大约有5年,以至于他的毕业前景一度变得十分渺茫。

所幸的是,Guido的顶头上司和大学里的一位教授没有放弃他。他们及时提醒他学历对于未来发展的重要性,并帮助他修完了必要的课程,指导他完成了毕业论文。最终,Guido在1982年成功获得了数学和计算机科学硕士学位。

Part.2

一次失败的教训,一个灵感的诞生

毕业后,他加入荷兰国家数学与计算机科学研究所(CWI)。入职初期,他参与了ABC语言的开发项目,该项目旨在替代当时操作复杂的Basic语言。Guido与团队投入将近五年时间深耕此项目,最终却未能实现预期目标。

事后复盘时,Guido认为项目失败的核心原因在于过度追求技术完美,且代码体系封闭,缺乏开放性与可扩展性。这次经历让他深刻领悟到编程语言设计与推广的关键逻辑。

后来,Guido调任至 Amoeba 团队负责开发基于微内核的操作系统。彼时主流编程语言要么语法烦琐,要么兼容性差,编写分布式系统代码时,Guido常常要在不同语言间反复切换,甚至为了一个简单的功能写数百行冗余代码。

有一次,他为了实现“跨节点文件传输”功能,连续调试两周仍频繁出错,疲惫之余他突然萌生一个想法:如果有一门语言,能兼顾C语言系统控制能力、Shell语言易用性,还能轻松调用其他语言的库,支持交互式编程,那该有多好?

Part.3

圣诞夜启动副业小项目,结果创造Python

这一想法在他心中沉淀多年,直到1989年圣诞节才迎来实践契机。当时33岁的Guido已在CWI工作7年,圣诞假期期间,他选择留在办公室将此前构思的新语言付诸实践,开启一项“个人项目”好打发无聊的时间。

他以老式终端为工具,从编译器到解释器逐步搭建语言框架,仅三个月时间,就完成了Python原型的开发。凭借持续的投入,历经两年时间,Guido于1991年成功完成首个Python版本的开发。

Guido为新语言命名"Python"的灵感,并非来自蟒蛇,而是源自他钟爱的英国喜剧团体——蒙提·派森(Monty Python)。这部70年代开播的《飞行马戏团》以荒诞幽默著称,正契合他对这门语言的期待:既要简洁易记,又要打破编程语言的严肃刻板印象。

这种命名哲学与他"让编程变得轻松有趣"的设计理念一脉相承——摒弃复杂语法,提升开发体验。当然,这并不妨碍蟒蛇后来成为Python最具代表性的视觉符号。

在Python的设计中,Guido充分吸收ABC项目的经验教训,秉持“优雅”“明确”“简单” 的原则,允许在后续迭代中优化完善;语法设计融合了C语言的简洁、ABC语言的直观,同时借鉴Perl的正则表达式处理方式,引入 Lisp 语言中实用的 lambda、map 等函数。

此外,他明确规定 Python 需具备跨平台特性,支持 Windows、Linux 等主流操作系统,且普通开发者可轻松对其功能进行扩展。

Python早期有许多不完善的地方,遭到过一些抱怨和批评。Guido对此的回应非常经典且展现了他的开放与坦诚:“我知道Python很烂,请你加入我们完善它!”(I know Python sucks. Please come help us make it better!) 

这种直面问题、欢迎共建的态度,成功鼓舞了越来越多的开发者加入Python社区,共同改进它。在Guido与全球开发者的共同努力下,Python的函数库不断丰富,逐渐成为数据分析、科学计算领域的主流工具。

此后,Guido始终致力于Python的发展与推广。

2005年,他加入谷歌,期间开发了网页代码浏览工具Mondrian与版本控制工具 Rietveld,同时将半数工作时间用于Python的维护与优化。

Dropbox的创始人最喜欢Python,且Dropbox大量使用Python开发,于是在2012年,Guido转至 Dropbox,继续推动Python在实际应用场景中的落地。他在那里参与mypy项目,并主导了将500多万行代码从Python 2迁移到Python 3的巨大工程。

在Python社区,Guido有一个特别的称号——BDFL(Benevolent Dictator For Life),即“终身仁慈的独裁者”。这指的是他对Python语言的设计和发展拥有最终的决定权,但他的“独裁”是建立在仁慈和社区信任基础上的。

当然,他在2018年宣布不再担任BDFL角色,但 2019年仍以指导委员会成员的身份参与Python的发展工作,直至2020年正式退出。

2019年10月,他从Dropbox退休,却在2020年11月宣布复出,加入微软开发者部门担任杰出工程师,目前仍专注于提升Python的运行效率,展现出对技术探索的持久热情。

在这之中,Python经历了最大的危机:2008年Python 3发布,Python 3与Python 2彻底不兼容。这意味着原有Python 2代码无法直接在Python 3环境中运行,迫使开发者与企业面临艰难抉择:是承担迁移成本拥抱新技术,还是固守成熟的旧版本?

这场变革引发了严重的社区分裂,Python 2与Python 3形成长期并立的格局。众多保守企业及主流Linux系统(如RHEL/CentOS)坚持使用预装的Python 2,拒绝迁移。不过,Python软件基金会(PSF)和Guido本人展现了极强的决心,明确表示Python 3才是未来,并最终为Python 2设定了官方的“死亡日期”(2020年1月1日)。

同时,几乎所有的主流第三方库都发布了支持Python 3的版本。当NumPy、Django、Flask、Pandas这些基石库都完成迁移后,生态的障碍被彻底扫清。

Python 3成熟的时期,恰好赶上数据科学和机器学习的爆炸式增长。所有想进入这一新兴领域的新开发者从一开始学的就是Python 3。这股巨大的新生力量,瞬间让Python 3成为绝对的主流。

因此,Python不仅成功地度过了这场危机,反而变得比以往任何时候都更强大、更受欢迎,最终奠定了其作为当今世界顶级编程语言的地位。

如今,步入 AI 时代,Python 3.0 的重要性愈发凸显。相较于 Python 2.0,Python 3.0 解决了诸多历史遗留问题

原生支持 Unicode 编码,彻底解决多语言处理中的乱码问题;

统一语法规则,将 print 语句升级为函数,提升代码一致性;

新增类型注解、async/await 异步语法等现代化功能,适配复杂项目开发需求。

更关键的是,当前主流的AI框架(如TensorFlow、PyTorch)与数据分析库(如 Pandas、NumPy)均以 Python 3.0为核心支持版本,且在该版本上实现了性能优化。对于希望进入 AI、数据分析领域的开发者而言,掌握Python已成为必备条件。

如果你也渴望跟上时代脚步,学好Python,不妨从这份精心挑选的书单开启征程!

Part.4

人生苦短,Python是岸!

《Python编程快速上手 让繁琐工作自动化 第2版》

▼点击下方,即可购书

对于渴望快速入门Python,并运用它解决实际问题的读者而言,这本书堪称入门宝典。

它跳出传统枯燥的语法讲解模式,从日常实际应用场景切入,教你如何借助Python在一个或多个文件中搜索文本模式、创建/修改/移动/重命名文件与文件夹来组织计算机、抓取数据和信息、更新Excel表格、自动发送邮件和文本消息、组织计算机执行周期性任务等繁琐工作。

让你在实践操作中轻松掌握 Python的核心知识点,切实感受编程为工作带来的高效与便捷,顺利开启Python学习之路。

《Python编程从新手到高手》

▼点击下方,即可购书

作为一本循序渐进的Python学习指南,这本书特别适合零基础或基础较为薄弱的读者。

书中从 Python的哲学、开发环境、基本语法、项目结构和代码导入等内容开始讲解,逐步深入变量、数据类型、函数、类、对象、错误和异常等,再到探索Python的高级策略,如继承、混入、元类、抽象基类、自省、泛型、异步、并发、线程和并行等,最后一部分更是“超越代码”讲解项目的打包、分发、调试、日志、测试和剖析等环节,并概述Python开发的方向。

每个知识点都搭配了清晰明了的讲解以及丰富的实例代码,助力你稳步提升编程技能,从一名Python新手逐步成长为能够独立开发项目的高手,为后续深耕 AI、数据分析等领域筑牢根基。

《Python编程实战 妙趣横生的项目之旅》

▼点击下方,即可购书

倘若你已厌倦单调的知识点罗列,迫切希望通过有趣的项目来提升Python编程能力,那么这本书无疑是你的最佳选择。

以一系列妙趣横生的项目为依托,如游戏开发、数据分析、应用构建、自动化工具制作等,引领读者在实战过程中灵活运用Python的各种特性和库。读者会学到各种各样的技术,如马尔可夫链分析技术、蒙特卡罗模拟、图像叠加技术、基因遗传算法等。

同时,还会学习一些模块的使用方法,例如pygame、Pylint、pydocstyle、Tkinter、python-docx、Matplotlib和pillow等。

在完成项目的过程中,你不仅能够巩固所学知识,还能有效培养解决实际问题的思维方式和能力,深切感受Python编程的乐趣与魅力。

《Python极客项目编程(第2版)》

▼点击下方,即可购书

对于已有一定Python基础,想要挑战更有深度、更具创新性项目的读者来说,这本书极具吸引力。它聚焦Python高端技术领域的应用,涵盖物联网项目、机器学习应用、网络安全工具开发等极客级项目。

本书共15章,每章讲解一个有趣的Python项目,这些项目可以分成五个部分:

第一部分是热身,包括科赫雪花、繁花曲线;

第二部分是模拟生命,包括康威生命游戏、使用Karplus-Strong算法生成泛音、群体行为模拟;

第三部分是好玩的图形,包括文本图形、照片马赛克、裸眼立体画;

第四部分是走进三维,包括理解OpenGL、圆环面上的康威生命游戏、体渲染;

第五部分是玩转硬件,包括在树莓派Pico上实现Karplus-Strong算法、树莓派激光音乐秀、物联网花园、树莓派音频机器学习。 

通过完成这些项目,你能够深入了解Python在前沿技术领域的强大实力,大幅提升自己的技术水平,向着Python极客的目标迈进,更好地契合AI时代对高端Python人才的需求。

Part.5

结语

Python之父用一次心血来潮的编程,为我们打开了一扇新世界的大门。

这份Python书单如同一张地图,从“快速上手”的实用主义,到“新手到高手”的系统构建,再到“妙趣横生”的创意激发,最后是“极客项目”的硬核探索,全方位助你解锁Python的强大潜力。

现在,就选择你的起点,一起加入这场改变世界的编程之旅吧!

好的,以下是使用Python的Tkinter库编写双人贪吃蛇游戏的代码示例: ```python import tkinter as tk import random # 游戏界面的宽度和高度 WIDTH = 400 HEIGHT = 400 # 蛇的身体长度和速度 SNAKE_SIZE = 20 SNAKE_SPEED = 100 class SnakeGame(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.canvas = tk.Canvas(self, width=WIDTH, height=HEIGHT) self.canvas.pack() # 初始化蛇的位置和方向 self.snake = [(100, 100), (80, 100), (60, 100)] self.direction = "Right" # 初始化食物的位置 self.food = self._create_food() # 绑定键盘事件 self.bind("<Key>", self._on_key_press) # 开始游戏循环 self._game_loop() def _create_food(self): x = random.randint(1, (WIDTH - SNAKE_SIZE) // SNAKE_SIZE) * SNAKE_SIZE y = random.randint(1, (HEIGHT - SNAKE_SIZE) // SNAKE_SIZE) * SNAKE_SIZE return x, y def _draw_snake(self): self.canvas.delete("snake") for x, y in self.snake: self.canvas.create_rectangle(x, y, x + SNAKE_SIZE, y + SNAKE_SIZE, fill="green", tag="snake") def _draw_food(self): x, y = self.food self.canvas.create_rectangle(x, y, x + SNAKE_SIZE, y + SNAKE_SIZE, fill="red", tag="food") def _move_snake(self): head_x, head_y = self.snake[0] if self.direction == "Up": new_head = (head_x, head_y - SNAKE_SIZE) elif self.direction == "Down": new_head = (head_x, head_y + SNAKE_SIZE) elif self.direction == "Left": new_head = (head_x - SNAKE_SIZE, head_y) else: new_head = (head_x + SNAKE_SIZE, head_y) self.snake.insert(0, new_head) self.snake.pop() def _check_collision(self): head_x, head_y = self.snake[0] if ( head_x < 0 or head_x >= WIDTH or head_y < 0 or head_y >= HEIGHT or (head_x, head_y) in self.snake[1:] ): return True if (head_x, head_y) == self.food: self.snake.append((0, 0)) self.food = self._create_food() return False def _on_key_press(self, event): if event.keysym == "Up" and self.direction != "Down": self.direction = "Up" elif event.keysym == "Down" and self.direction != "Up": self.direction = "Down" elif event.keysym == "Left" and self.direction != "Right": self.direction = "Left" elif event.keysym == "Right" and self.direction != "Left": self.direction = "Right" def _game_loop(self): if not self._check_collision(): self._move_snake() self._draw_snake() self._draw_food() self.after(SNAKE_SPEED, self._game_loop) else: self.canvas.create_text( WIDTH // 2, HEIGHT // 2, text="Game Over", font=("Helvetica", 24), fill="red", tag="gameover", ) game = SnakeGame() game.mainloop() ``` 这个代码使用Tkinter库创建了一个窗口,游戏界面大小为400x400像素。蛇的身体由矩形组成,随着方向键的按下而移动。食物是一个红色的方块,当蛇吃掉食物时,身体长度增加。如果蛇撞到边界或自己的身体,游戏结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值