本文是Python之禅特别系列的一部分,重点关注原则第十二、十三和十四:歧义和清晰的作用。最小惊奇原则是设计用户界面时的准则。这意味着当用户执行一个动作时,程序应该尽可能少地做让用户感到惊讶的事情。这与孩子们喜欢一遍又一遍地阅读同一本书的原因相同:没有什么比能够预测并使预测成真更令人欣慰的了。在开发ABC语言(Python的灵感)期间,一个重要的见解是编程设计是用户界面,需要使用与UI设计人员相同的工具进行设计。值得庆幸的是,从那时起,越来越多的语言在UI设计中采用了可承受性和人体工程学的概念,即使它们的应用并不严谨。这引出了Python禅宗中的三个原则。面对歧义,拒绝猜测1+“1”的结果应该是什么?“11”和2都是猜测。这个表达是模棱两可的:无论如何这样做都会让一些人感到惊讶。一些语言选择猜测。在JavaScript中,结果是“11”。在Perl中,结果是2。在C中,结果自然是空字符串。面对歧义,JavaScript、Perl、C都在猜测。在Python中,这会引发TypeError:这不是一个可以忽略的错误。捕获TypeError是非典型的:它通常会终止程序或至少终止当前任务(例如,在大多数Web框架中,它将终止对当前请求的处理)。Python拒绝猜测1+"1"是什么意思。程序员必须带着明确的意图编写代码:1+int("1"),即2;或str(1)+"1",即"11";或"1"[1:],这将是一个空字符串。通过消除猜测,Python使程序更具可预测性。尝试找到一个,最好是唯一明显的解决方案。应该有一种——最好只有一种——显而易见的方法来做到这一点。预测也可能存在偏差。给定一个任务,你能预测实现它的代码吗?当然,不可能完美预测。毕竟,编程是一种创造性的努力。然而,没有必要故意提供多种冗余方式来实现相同的目标。某些解决方案在某种意义上可能“更好”或“更Pythonic”。对Python的部分审美欣赏是可以就哪种解决方案更好进行健康的辩论。您甚至可以从不同的角度继续编程。甚至可以接受不同的观点,以便使它们达成一致。但在这一切之下,必须意识到正确的解决方案最终会出现。我们必须希望,通过商定实现我们目标的最佳方式,我们最终将达成真正的协议。虽然这种方式一开始可能并不明显(除非你是荷兰人)尽管这种方式一开始可能并不明显(除非你是荷兰人)这是一个重要的警告:首先,完成任务的最佳方式往往不是明显的。想法在不断发展。Python也在不断发展。逐块读取文件的最佳方法(可能在Python3.8之前)是使用海象运算符(:=)。对于像逐个读取文件这样常见的任务,在Python近30年的历史中还没有出现过“单一的最佳方式”。当我在1998年开始使用Python1.5.2时,还没有一种逐行读取文件的最佳方法。多年来,了解某个键是否在字典中的最佳方法是使用关键字.haskey,直到in运算符出现后它才改变。只要意识到找到一种(而且只有一种)方法来实现你的目标可能需要30年才能尝试其他方法,Python可以不断寻找这些方法。这种历史观认为,做一件事情用30年是可以接受的,但在一个仅仅存在了200多年的国家,人们往往会感到不习惯。从Python之禅的这一部分来看,荷兰人无论是Python之父GuidovanRossum,还是著名计算机科学家EdsgerW.Dijkstra,都有着不同的世界观。要理解这部分,一定程度的欧洲时间感是必不可少的。
