通过描述性命名的Python可读性

时间:2010-12-20 16:20:35

标签: python naming-conventions

我一直在使用Python大约一年,来自大多数Java背景。我发现Python很容易学习,因为它专注于可读性和简单的设计。我不了解python的原因是为什么对于一种非常注重可读性的语言,它经常使用非描述性的名称来表示模块,函数,常量等。我喜欢Java的一件事就是它非常具有描述性的类/属性/方法名称(因为这个原因,我更喜欢objective-C)。似乎python程序员似乎采用了C类方法来命名它们尽可能用作短名称的地方。我知道每个人都想做尽可能少的打字,但我喜欢很多程序员花大部分时间阅读代码,而不是写代码,所以我找到了简短的非描述性名称和长描述性名称之间的选择,很容易使。 (我喜欢更长的描述性名称xD)

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

  • sched - 事件调度程序,这可能是EventScheduler吗?
  • asyncore - 异步套接字处理程序,AsynchronousSocketHandler?
  • imghdr - 确定图像的类型,DetermineImageType?
  • 味酸?

我知道这不是一个大问题,但我发现自己经常不必查看我在其他语言(如Objective-C或Java)中遇到的任何新(或忘记)模块的含义这意味着直接来自模块/函数/属性定义。 另一方面,人们倾向于编写类似于标准库编写方式的代码,因此您可以确定,如果标准库使用非描述性名称,则普通开发人员将使用更多非描述性名称。

我只是想知道有谁知道这是为什么?

2 个答案:

答案 0 :(得分:2)

我想在描述性和简洁性之间取得平衡,Python的脚本背景使它比Java更简洁(因为我们的业余爱好者对所有打字都太懒了;-))。听起来像是一个粉丝的风险,Python试图在描述性但长期(Java)和短暂但棘手的(*咳嗽* Perl)之间划清界线。

经常使用且易于理解的内容可能很短,因此我们有str类型而不是AsciiStringUnicodeString(分别为Python2 / 3)。更专业的功能,例如urllib.urlencoderandom.normalvariate会获得更长的名称。

核心语言通常很简单(例如,没有字符类型,只有一个字符的字符串)。认为只有“一种正确的方法”以及鸭子打字的想法意味着不需要像do_something_with_type_a这样的名字。而且,虽然这只是一个借口,但对于任何不明显的事情都有clear documentation

至于itertools?模块名称并不重要,它只是一组功能。有些功能更清晰(chaincyclerepeat),有些功能更为清晰(isliceizip)。我想我们假设一旦你熟悉Python就像“压缩”和“切片”这样的概念是直截了当的。

sched / asyncore / imghdr:所有这些都是简短而且不具备说明性的,但我从未见过任何使用它们。它们可能追溯到8个字符文件名的时代,更新它们从未成为优先考虑事项。

pickle:古怪,但你真的只需要查看一次,然后很明显。你无法真正称它为“序列化程序”,因为它是针对特定的序列化,而不是通用框架。

答案 1 :(得分:0)

查看PEP 8

亮点:

  

模块应该有简短的全小写名称

     

几乎无一例外,类名使用CapWords约定。内部使用的类别还有一个主要的下划线。

     

函数名称应为小写,并根据需要用下划线分隔,以提高可读性。

然后是Zen of Python。在任何情况下,AFAIK都没有使用由Python社区驱动的明确,描述性和明显名称的处方 - 这取决于开发人员。

相关问题