聊聊Python的一个彩蛋:Python之禅

Python之禅 Python之禅(The Zen of Python) 在交互式解释器中输入 import this 就可以看到 Tim Peters 的 The Zen of Python了 。 import this Python之禅: The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is bet... 阅读详情

在Python的解释器中隐藏一个彩蛋,输入import this就会返回19条Python之禅,具体如下:

>>>import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea – let’s do more of those!
它的作者是 Tim Peter,这些设计理念开始是在Python邮件列表中发表,它包含了影响Python编程语言设计的19条软件编写原则。在最初及后来的一些版本中,一共包含20条,其中第20条是“这一条留空(…)请 Guido 来填写”。这留空的一条从未公布也可能并不存在。

其中从吉多·范罗苏姆的博客中可以了解到,最开始Python是他个人的一个实验项目(skunkworks)。为了加快Python发展,他采用了一些原则,其中包括省时规则(timesaving rules):

尽可能从其他地方借用想法,只有它有意义。

“事情应该尽可能简单,但不要简单。” (来自爱因斯坦)

做好一件事情。(来自UNIX哲学)

不要太担心性能,可以在后面需要时进行优化。

不要与环境抗争,顺其自然。

不要尝试完美,因为“足够好”通常就是这样。

(因此)有时可以偷工减料,尤其是后面可以完善的情况下。

还有除了省时规则以外的其他规则:

1. Python实现不应局限于特定平台。可以运行某些功能并非总是可用的,但是核心部分应该在任何地方都可以使用。

2. 不要用机器可以处理的细节来打扰用户。

3. 支持和鼓励独立于平台的用户代码,但不要中断对平台功能或属性的访问(这与Java形成鲜明对比)。

4. 大型复杂系统应具有多个扩展级别。这为经验丰富的用户(无论是否熟练)提供了最大的发挥空间。

5. 错误不应致命。也就是说,只要虚拟机仍在运行,用户代码就应该能够从错误情况中恢复。

6. 同时,错误不应静默地传递(后两项决定了在整个实现中使用异常)。

7. 不应允许用户的Python代码错误导致Python解释器的不确定行为;核心错误绝不应该是由用户的错误引起的。

基于以上的哲学理念,Tim Peter整理了19条Python之禅并收录到Python增强建议(PEP 20)之中。

下面,再来简单说下这19条Python之禅的含义。

优美优于丑陋(Beautiful is better than ugly)

程序员经常为实现功能而快速编写代码,导致没有考虑可读性。但在这个看颜值的时代,优美的代码肯定更加优秀并且受人欢迎。

在这里插入图片描述

看到糟糕的代码.gif

明了优于隐晦(Explicit is better than implicit)

这一条不言而喻的,应该让代码清晰可读,避免将代码的功能隐藏晦涩的代码中,使得别人需要在非常熟悉代码之后才能完全理解其功能。谁也不希望过一个月后再阅读自己的代码是下面的表情。

在这里插入图片描述

阅读隐晦的代码.gif

简单优于复杂, 复杂优于凌乱(Simple is better than complex, Complex is better than complicated)

这两条提醒我们,构建任何事物都可以使用简单或复杂的技术来完成。对于一个简单的问题,例如建造一个鸟笼,一个简单的解决方案会更好。另一方面,制造火车发动机是一个复杂的问题,需要复杂的技术。即使可以使用鸟笼技术制造柴油火车引擎,最终也可能不是理想的解决方案。相对于复杂,简单一点更好,但要了解简单的局限性。

扁平优于嵌套(Flat is better than nested)

程序员喜欢将事物分门别类,尤其是包含子类的类别,这些子类又包含其他子类。但是,最好可以将代码仅放在一个顶层模块或类中,而不是将代码分散在多个子模块或子类中。如果制作需要导入import spam.eggs.bacon.ham.foo.bar之类的代码的程序包和模块,那么这代码就太复杂了。

在这里插入图片描述

稀疏优于稠密(Sparse is better than dense)

程序员通常喜欢将尽可能多的功能塞入尽可能少的代码中,例如像以下这样的单行代码:

print(’\n’.join("%i bytes = %i bits which has %i possible values." % (j, j*8, 256**j-1) for j in (1 << i for i in range(8))))
虽然这样的代码能人自我感觉良好,但它会让尝试理解它的同事非常不爽。与密集的单行代码相比,分布在多行代码通常更易于阅读。

可读性很重要!(Readability counts)

自从1970年代以来一直使用C语言进行编程的人,strcmp()可能显然意味着“字符串比较”功能,但是现代计算机具有足够的内存来写出完整的函数名。不要从你的名字中删除元音,也不要写过于简洁的代码。代码的可读性和可维护性更重要,因此,清晰易读的代码比简洁的不清晰代码更为重要。

即使实用比纯粹更优, 特例亦不可违背原则。(Special cases aren’t special enough to break the rules, Although practicality beats purity)

这两条是相互矛盾的。程序员有时撸起袖子就是干,代码能运行就行。这样的做法可能会导致一堆混乱的,无法维护的代码。另一方面,又会讲究各种设计模式,可复用性,比如Java编程语言尝试使所有代码适合其面向对象的范例,即使是最小的程序,也常常会导致大量样板代码。实际上,在这两种风格都不能走极端,要根据实际情况折中取舍。

错误绝不能悄悄忽略, 除非它明确需要如此。(Errors should never pass silently, Unless explicitly silenced.)

仅仅因为程序员经常忽略错误消息并不意味着程序应该停止发出错误消息。当函数返回错误代码而不引发异常时,可能会发生无提示的错误。但是,让程序快速失败并崩溃比使错误静默并继续运行程序更好。否则会不可避免地让后面发生的错误更加难以调试,因为它们与原始错误原因相去甚远。尽管你可以选择忽略程序所导致的错误,但是请确保这个错误是被你捕获的。

面对不确定性,拒绝妄加猜测(In the face of ambiguity, refuse the temptation to guess)

计算机不是魔术。如果代码无法正常工作,那是有原因的,只有谨慎,批判性的思维才能解决。不能盲目猜测、不加思考,随意的掩盖问题并不是真正地解决问题。

任何问题应有一种,且最好只有一种,显而易见的解决方法(There should be one—and preferably only one—obvious way to do it)

事实证明,用三种或四种不同的方式来编写可完成相同任务的代码是一把双刃剑:过于灵活的解决方法可以让人自由发挥。但如果都是随个人习惯实现,那会让整个项目的代码参差不齐,后期维护人员也会一头雾水。

尽管这方法一开始并非如此直观,除非你是荷兰人(Although that way may not be obvious at first unless you’re Dutch)

这是一句玩笑话。吉多·范罗苏姆是Python的创建者和BDFL(独裁者)。但是,即使这样也不能阻止Python结合三种不同的格式化字符串的方式。

做优于不做,然而不假思索还不如不做(Now is better than never, Although never is often better than right now)

这两条告诉我们,挂起或陷入无限循环的代码显然是不好的。但是,几乎可以肯定的是,等待程序结束总比过早结束程序而导致错误结果要好。

很难解释的,必然是坏方法。很好解释的,可能是好方法(If the implementation is hard to explain, it’s a bad idea.If the implementation is easy to explain, it may be a good idea.)

Python致力于简化程序员的工作,而不是适应计算机以使程序运行更快。程序不仅需要编写它的程序员可以理解,而且还需要其他维护代码的程序员可以理解。这两条提醒我们,如果“高性能”代码过于复杂以致程序员无法理解和调试,那么它就是不好的代码。反之,很容易向其他人解释程序的代码,并不意味着它不是不好的代码。编程是一件困难的事,程序员何苦为难程序员。

命名空间是个绝妙的主意,我们应好好利用它(Namespaces are one honking great idea—let’s do more of those)

命名空间(以及全局和局部作用域)是防止一个模块或作用域中的名称与另一个模块或作用域中的名称冲突的关键。但也要记住,扁平比嵌套好,命名空间应该仅用于防止命名冲突,而不能添加不必要的分类。

这些都是很好的设计哲学,每个有追求的Python程序员都应该谨记于心。

欢迎关注我的公众号“Python的乐趣”,原创技术文章第一时间推送。

在这里插入图片描述

用Python 写一个机器人陪你聊天(文尾有彩蛋) 工作一忙,原来秉烛夜谈的好友现在都很少聊天,微信都成了微信群的天下,鲜有微信好友给你发消息,想要主动发却也找不到开题话题,怎么办?用Python写一个机器人陪自己聊聊天吧。以下是源码及解析,小白都看得懂。一定要看完,结尾还有惊喜彩蛋~ 一、工具简介 1——Python。写代码的工具; 2——itchat库。第三方库,用来登录微信,接收并回复微信好友信息; 3——图灵机器人。第三方接口,我们... 阅读详情

相关推荐

明日方舟洁哥EX关隐藏爱心彩蛋复现与OpenCV检测指南

在游戏场景中,开发者常会埋藏一些不影响玩法、却充满趣味的隐藏装饰,这类彩蛋往往需要玩家主动调整视角才能发现。从图像处理角度看,任何图案的识别本质上都是边缘与对称性的提取。借助OpenCV这样的开源计算机视觉库,可以对游戏截图进行对比度增强与Canny边缘检测,将肉眼难以分辨的浅色轮廓清晰分离出来,这为我们验证和分享游戏内隐藏内容提供了一种客观的技术手段。无论是分析手游地图中的地砖拼花,还是捕捉视频画面里的特定形状,边缘检测技术都能帮助玩家快速定位目标。本文就以明日方舟洁哥EX关中被玩家发现的爱心彩蛋为例,详

weixin_29050513的博客 239

Python 之禅

Python 之禅 要获悉这些有关编写优秀 Python 代码的指导原则,有多种方法,大致分为两类: 在编辑器中查看。新建 .py 文件,文件名随便取,键入 import this,并运行代码,会有控制台输出 “Python之禅”的内容。 在解释器或命令窗口中查看。直接输入 import this 并回车,需要注意的是命令窗口中得先输入python 并回车,待看到 >>> 提示...

Wow! You can really code! 1122

CTFHUB彩蛋全攻略:从入门到精通

本文是CTFHUB平台彩蛋挖掘的完整攻略,从基础到精通系统讲解。涵盖查看源代码、抓包分析、编码解码等核心技巧,并指导如何培养发现隐藏信息的“彩蛋嗅觉”。旨在帮助CTF爱好者提升信息搜集与发散思维能力,在趣味探索中掌握实战技能。

m0n1o2p的博客 424

python的设计哲学_Python 的设计哲学

The Zen of Python, by Tim PetersPython 的设计哲学,作者:Tim PetersBeautiful is better than ugly.优雅胜于丑陋。Explicit is better than implicit.明确胜于含糊。Simple is better than complex.简单胜于复杂。Complex is better than compl...

weixin_39935777的博客 175

C# .NET6 TesseractOCR 图片文字识别

在你的项目中的tessdata-main文件夹找到这几个文件,并右键->属性设置为【如果较新则复制】有几个需要用到的模型,需要生成的时候复制到输出目录中,在项目中设置即可。TesseractOCR兼容 x86 与 x64。附 :ImageUtils.RegionCropping()源码。Visual Studio 2022 社区版。下载完成后解压在你的项目中,如图所示。从官方项目中获取模型数据, 网址为。

qq_44121554的博客 3854

DeepSeek高阶应用:DeepSeek+Coze构建智能文献综述与趋势分析自动化系统

本文详细介绍了如何利用DeepSeek与Coze构建智能文献综述与趋势分析自动化系统。通过DeepSeek的深度语义理解和结构化信息提取能力,结合Coze的可视化工作流编排,实现学术论文的自动解析、分类整理与知识入库。该系统能7x24小时自动追踪领域前沿,将研究人员从繁琐的文献处理中解放出来,专注于更高层次的思考与创新。

weixin_29050271的博客 179

一文带您了解Python之禅(Zen)及27个高级技巧

强调编写清晰、可读的代码是一门艺术,Python之禅的19条原则包括"美丽总比丑陋好"、“可读性很重要”、"明确比隐式好"等,提醒开发者在实际工作中要务实地平衡目标实现的最佳和最迅速的方式。这些python 技巧是python的之禅原则的具体实现。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

m0_58477260的博客 2942

5分钟搞定!用OpenCV实现全景图像柱面展开的保姆级教程(附完整代码)

本文提供了一份使用OpenCV实现全景图像柱面展开的详细教程。通过清晰的数学原理讲解和分步代码演示,指导读者快速掌握从等距柱状投影全景图到平面展开图的核心转换方法,并涵盖性能优化、参数调整及透视视图扩展等实用技巧,适合图像处理爱好者和开发者实践。

sony5的博客 573

python内部的python之禅打印

执行import this控制台就会返回 python官方内置的一段话。

ThinkPet 455

【BIM入门实战】Revit创建地形的几种方法及优缺点

Revit在体量和场地选项卡的【地形表面】工具可以创建三维地形,有三种方法:放置点、指定点文件和导入实例文件、倾斜摄影点云技术和InfraWorks地形生成。 文章目录1. 放置点2. 指定点文件3. 导入实例文件4. 倾斜摄影点云技术5. InfraWorks地形生成 1. 放置点 放置点功能位于体量和场地选项卡下地形表面,点开找到放置点,并通过自定义设置点的高程值来创建地形的高程数据。 优点:通过用户自定义高程点来绘制模型,使地形更为精确。 缺点:只适用于面积小的项目,面积太大,人工效率低下。 .

智慧空间实验室 4759

5、数据计算与处理技巧全解析

本文深入解析了Tableau中的多种数据计算与处理技巧,涵盖LOD计算、日期与字符串处理、计数优化、数据混合限制及自定义总计等核心内容。通过实际案例和流程图,系统讲解了各技巧的应用场景、实现步骤与注意事项,并提供性能优化建议和常见问题解答,帮助用户提升数据分析效率与可视化精度。同时展望了未来数据计算技术的发展趋势,是Tableau用户进阶必备的全面指南。

peach的博客 82

用python写聊天机器人_用Python 写一个机器人陪你聊天(文尾有彩蛋)

工作一忙,原来秉烛夜谈的好友现在都很少聊天,微信都成了微信群的天下,鲜有微信好友给你发消息,想要主动发却也找不到开题话题,怎么办?用Python写一个机器人陪自己聊聊天吧。以下是源码及解析,小白都看得懂。一定要看完,结尾还有惊喜彩蛋~一、工具简介1——Python。写代码的工具;2——itchat库。第三方库,用来登录微信,接收并回复微信好友信息;3——图灵机器人。第三方接口,我们本次使用的机器人...

weixin_39542093的博客 174

YOLOv8与UNetV2融合:一种面向目标检测与图像分割的混合方法【附核心代码】

我们提出了一种基于YOLOv8和UNetV2相结合的混合架构。该架构利用YOLOv8作为主干进行目标检测,同时在YOLOv8的特征提取过程中,引入UNetV2来进行图像分割任务的增强。在该架构中,YOLOv8负责大范围目标检测和位置预测,而UNetV2则在检测网络的特征图基础上,通过其高效的上下文信息提取和细节恢复能力,进一步优化分割任务。在本文中,我们提出了一种改进YOLOv8的方法,通过引入图像分割网络UNetV2来提高图像分割检测性能。

一键难忘的博客 3525

深入解读Python之禅:19句箴言如何塑造代码风格与编程哲学

在Python编程实践中,代码可读性与优雅的设计始终是开发者追求的核心目标之一。Python之禅(Zen of Python)是源于社区的一组编程哲学格言,通过`import this`即可查看,它浓缩了语言设计者在性能、简洁与清晰之间的取舍智慧。这些原则并非强制规范,而是帮助开发者在面对复杂业务逻辑、异常处理和API设计两难时,做出更符合工程审美的判断。从命名规范到控制流扁平化,从错误日志到避免过度设计,理解并应用这些思想能显著提升代码可维护性与团队协作效率。本文结合真实爬虫、数据清洗与Web开发场景,逐

weixin_33423874的博客 145

使用Matlab实现海洋监视雷达检测仿真

海洋监视雷达是一项重要的海洋探测技术,可以用于海上船只、飞机、潜艇等目标的探测和监视,具有广泛的应用价值。本篇文章将介绍如何使用Matlab进行海洋监视雷达的检测仿真,并提供相应的源代码。本篇文章提供了利用Matlab进行海洋监视雷达检测仿真的基本思路和代码实现。读者可以根据自己的需求进行修改和优化,以适应不同的应用场景。使用Matlab实现海洋监视雷达检测仿真。

2301_78484069的博客 448

注册GitHub时出现Unable to verify your captcha response.Please visit https://docs.github.com/解决方案(持续更新)

本文主要介绍了注册GitHub时出现Unable to verify your captcha response. Please visit https://docs.github.com/articles/troubleshooting-connectivity-problems/#troubleshooting-the-captcha for troubleshooting information.解决方案,希望能对学习使用GitHub的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

python修炼之道_Pythonic:Python 修炼之道

Pythonic:Python 修炼之道金海飞 百度高级研发工程师负责百度智能运维产品 (Noah) 基础组件的设计研发工作, 在程序部署, 数据传输方面有广泛的实践经验.干货概览作为一个码农, 大家一定会有阅读祖传代码的经历. 由于 "快功出粗活" , 很多人写代码就是 一把 "梭" , 最终码农们互相吐槽, 冤冤相报, 导致一个业务系统代码可读性越来越差, 越来越 难以维护 .为了让码农...

weixin_39636857的博客 349

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Day03 Java转Python】从HashMap到dict——Python字典的魔法(附赠集合小彩蛋)

Java的HashMap和HashSet就像一本正经的老学究——规矩多,但可靠。Python的dict和set则像灵活的小伙子——上手快,干活麻利。在Python里,你会发现不需要写那么多冗余代码,能专注在逻辑上。今日灵魂拷问你在Java里写过吗?Python一行搞定。你想过用集合运算去处理两个列表的差异吗?Python直接。动手试试:修改练习代码,让它能处理文件中的文本,并输出频率最高的前3个单词。把答案留在评论区,咱们一起交流~下篇预告:Day 4 我们将聊控制流与循环,看看Python如何让。

bianyuan172的博客 393

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Pythonic的真相:从Python之禅到代码可读性的工程实践

在编程世界中,代码风格不仅是个人偏好,更直接影响团队协作与项目维护效率。Pythonic一词常被误解为语法糖的堆砌,实则源于Python之禅中“优美胜于丑陋”“明了胜于晦涩”“简单胜于复杂”等设计原则。这些原则并非玄学审美,而是强调通过显式优于隐式的表达、扁平化的结构以及数据驱动的逻辑,让代码具备自然语言般的可读性。Pythonic的工程价值在于降低认知负担,使代码评审、缺陷定位与功能扩展更加高效,这一点在大型开源项目和商业系统中尤为关键。无论是列表推导式、字典映射替代分支判断,还是资源上下文管理器,都是该

weixin_32821533的博客 244

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

当代码有了心跳:聊聊Python里那个让你不再焦虑的进度条神器 tqdm [特殊字符]️

等待不可怕,可怕的是你不知道还要等多久。—— 鲁迅(没说过,但很有道理对不对?在算力爆炸的时代,进度可视化反而成了稀缺品。tqdm用极简的API解决了这个高频痛点。在深夜跑模型在服务器上迁移数据在笔记本里预处理百万行数据看到那个跳跃的小绿条时,请记住——那不是冰冷的百分比,是代码世界对你温柔的回应。(好了不煽情了,快去给你的循环加个条吧!记得彩色版更提神哦 😉)彩蛋:据说用tqdm的程序员debug速度提升30%,因为… 等待时可以去倒咖啡啊!☕。

betabyte的博客 1489

自动化篇 | 聊聊 Python 自动化脚本打包成 APK

阅读文本大概需要 6 分钟。之前有读者朋友说 Airtest 官方支持将自动化脚本编译成 APK 直接运行,照着官方提供的文档操作了一遍,发现不少的坑,今天带大家一起来填这些坑。在开始编...

简说Python的博客 1802

Python开源社区的幽默文化:从NTTS(没时间睡觉了)的诞生看开发者恶搞精神

在Python开源社区里,除了严谨的框架和炫酷的算法,还藏着一种独特的"恶搞文化"。今天的主角NTTS(全称NO TIME TO SLEEP,中文名"没时间睡觉了")就是典型代表:它不解决任何"正经"问题,却能让你在Ctrl+C中断时,报出一个神经网络模型的"高大上"错误,让代码看起来就像正在跑AI推理。今天,我们就从NTTS的诞生,聊聊开发者们藏在代码里的幽默与自嘲。 ## NTTS是什么?一

gitblog_00447的博客 158

Pythonic——Python修炼之道

作者简介金海飞 百度高级研发工程师负责百度智能运维产品(Noah)基础组件的设计研发工作,在程序部署、数据传输方面有广泛的实践经验。干货概览作为一个码农,大家一定会...

AIOps智能运维 880
上一篇: 漫话Python三十年
下一篇: 数十万数据Excel数据不好处理怎么办?几行Python搞定
思维饭堂
博客等级 码龄6年 31粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值