通过描述性命名提高Python可读性

3 投票
2 回答
534 浏览
提问于 2025-04-16 08:47

我已经用Python大约一年了,之前主要是用Java。因为Python注重可读性和简单设计,我觉得它很容易上手。不过,有一点我不太明白:既然Python这么注重可读性,为什么它的模块、函数、常量等名字常常不太好理解呢?我喜欢Java的一个原因就是它的类、属性和方法名字都很清晰(我更喜欢Objective-C,原因也是这个)。看起来Python程序员在命名时一般都喜欢用尽量短的名字,像C语言那样。我知道大家都想少打字,但我和很多程序员一样,大部分时间都是在读代码而不是写代码,所以在短而不清晰的名字和长而清晰的名字之间,我觉得选择长名字更容易(我喜欢长名字,哈哈)。

举几个例子,看看标准库中的一些模块:

  • sched — 事件调度器,为什么不叫EventScheduler呢?
  • asyncore — 异步套接字处理器,为什么不叫AsynchronousSocketHandler呢?
  • imghdr — 确定图像类型,为什么不叫DetermineImageType呢?
  • Pickle?

我知道这不是个大问题,但我发现自己经常需要查找新模块(或忘记的模块)的意思,而在其他语言比如Objective-C或Java中,我可以直接从模块、函数或属性的定义中理解它们的意思。另一方面,人们往往会写出和标准库类似风格的代码,所以如果标准库用的不清晰的名字,普通开发者用的名字可能会更不清晰。

我只是想知道,大家知道这是为什么吗?

2 个回答

0

看看这个 PEP 8 的内容吧。

重点内容:

模块的名字应该简短,并且全部使用小写字母。

几乎没有例外,类的名字要用大写字母开头的方式(也叫CapWords)。内部使用的类名还要在前面加一个下划线。

函数的名字应该是小写字母,必要时用下划线分隔单词,以提高可读性。

还有一个叫 Python之禅 的东西。总之,按照我所知,Python社区并没有强制要求使用明确、描述性和显而易见的名字,这完全由开发者自己决定。

2

我觉得在描述性和简洁性之间需要找到一个平衡点,而Python的脚本背景让它比Java更简洁一些(因为我们这些爱好者懒得打那么多字 ;-))。虽然这样说可能有点像是粉丝,但Python试图在描述性强但冗长(像Java)和简短但难懂(*咳*Perl)之间找到一个合适的中间地带。

那些常用且容易理解的东西可以简短一些,所以我们有了str类型,而不是AsciiStringUnicodeString(分别对应Python2和3)。一些更专业的函数,比如urllib.urlencoderandom.normalvariate,名字就会长一些。

核心语言通常保持简单(例如,没有单独的字符类型,只有一个字符的字符串)。“只有一种正确的方法”这个想法,加上鸭子类型,让我们不需要像do_something_with_type_a这样的名字。而且,虽然这只是个借口,但对于那些不明显的内容,有清晰的文档可以参考。

至于itertools?模块名其实没什么大不了的,它只是一些函数的集合。有些函数的名字比较清晰(chaincyclerepeat),有些就不那么明显(isliceizip)。我想我们假设像“压缩”和“切片”这样的概念在熟悉Python后是很简单的。

sched/asyncore/imghdr:这些名字确实简短且不太描述性,但我从来没见过有人用过它们。它们可能是从8个字符的文件名时代留下来的,更新它们从来不是优先事项。

pickle:这个名字有点奇怪,但你只需要查一次,然后就会明白。你不能真的称它为“序列化器”,因为它是针对特定序列化的,而不是一个通用框架。

撰写回答