通过描述性命名提高Python可读性
我已经用Python大约一年了,之前主要是用Java。因为Python注重可读性和简单设计,我觉得它很容易上手。不过,有一点我不太明白:既然Python这么注重可读性,为什么它的模块、函数、常量等名字常常不太好理解呢?我喜欢Java的一个原因就是它的类、属性和方法名字都很清晰(我更喜欢Objective-C,原因也是这个)。看起来Python程序员在命名时一般都喜欢用尽量短的名字,像C语言那样。我知道大家都想少打字,但我和很多程序员一样,大部分时间都是在读代码而不是写代码,所以在短而不清晰的名字和长而清晰的名字之间,我觉得选择长名字更容易(我喜欢长名字,哈哈)。
举几个例子,看看标准库中的一些模块:
- sched — 事件调度器,为什么不叫EventScheduler呢?
- asyncore — 异步套接字处理器,为什么不叫AsynchronousSocketHandler呢?
- imghdr — 确定图像类型,为什么不叫DetermineImageType呢?
- Pickle?
我知道这不是个大问题,但我发现自己经常需要查找新模块(或忘记的模块)的意思,而在其他语言比如Objective-C或Java中,我可以直接从模块、函数或属性的定义中理解它们的意思。另一方面,人们往往会写出和标准库类似风格的代码,所以如果标准库用的不清晰的名字,普通开发者用的名字可能会更不清晰。
我只是想知道,大家知道这是为什么吗?
2 个回答
我觉得在描述性和简洁性之间需要找到一个平衡点,而Python的脚本背景让它比Java更简洁一些(因为我们这些爱好者懒得打那么多字 ;-))。虽然这样说可能有点像是粉丝,但Python试图在描述性强但冗长(像Java)和简短但难懂(*咳*Perl)之间找到一个合适的中间地带。
那些常用且容易理解的东西可以简短一些,所以我们有了str
类型,而不是AsciiString
或UnicodeString
(分别对应Python2和3)。一些更专业的函数,比如urllib.urlencode
或random.normalvariate
,名字就会长一些。
核心语言通常保持简单(例如,没有单独的字符类型,只有一个字符的字符串)。“只有一种正确的方法”这个想法,加上鸭子类型,让我们不需要像do_something_with_type_a
这样的名字。而且,虽然这只是个借口,但对于那些不明显的内容,有清晰的文档可以参考。
至于itertools?模块名其实没什么大不了的,它只是一些函数的集合。有些函数的名字比较清晰(chain
、cycle
、repeat
),有些就不那么明显(islice
、izip
)。我想我们假设像“压缩”和“切片”这样的概念在熟悉Python后是很简单的。
sched/asyncore/imghdr:这些名字确实简短且不太描述性,但我从来没见过有人用过它们。它们可能是从8个字符的文件名时代留下来的,更新它们从来不是优先事项。
pickle:这个名字有点奇怪,但你只需要查一次,然后就会明白。你不能真的称它为“序列化器”,因为它是针对特定序列化的,而不是一个通用框架。