我一直在使用Python大约一年,来自大多数Java背景。我发现Python很容易学习,因为它专注于可读性和简单的设计。我不了解python的原因是为什么对于一种非常注重可读性的语言,它经常使用非描述性的名称来表示模块,函数,常量等。我喜欢Java的一件事就是它非常具有描述性的类/属性/方法名称(因为这个原因,我更喜欢objective-C)。似乎python程序员似乎采用了C类方法来命名它们尽可能用作短名称的地方。我知道每个人都想做尽可能少的打字,但我喜欢很多程序员花大部分时间阅读代码,而不是写代码,所以我找到了简短的非描述性名称和长描述性名称之间的选择,很容易使。 (我喜欢更长的描述性名称xD)
举几个例子,只看一下标准库中的一些模块,
我知道这不是一个大问题,但我发现自己经常不必查看我在其他语言(如Objective-C或Java)中遇到的任何新(或忘记)模块的含义这意味着直接来自模块/函数/属性定义。 另一方面,人们倾向于编写类似于标准库编写方式的代码,因此您可以确定,如果标准库使用非描述性名称,则普通开发人员将使用更多非描述性名称。
我只是想知道有谁知道这是为什么?
答案 0 :(得分:2)
我想在描述性和简洁性之间取得平衡,Python的脚本背景使它比Java更简洁(因为我们的业余爱好者对所有打字都太懒了;-))。听起来像是一个粉丝的风险,Python试图在描述性但长期(Java)和短暂但棘手的(*咳嗽* Perl)之间划清界线。
经常使用且易于理解的内容可能很短,因此我们有str
类型而不是AsciiString
或UnicodeString
(分别为Python2 / 3)。更专业的功能,例如urllib.urlencode
或random.normalvariate
会获得更长的名称。
核心语言通常很简单(例如,没有字符类型,只有一个字符的字符串)。认为只有“一种正确的方法”以及鸭子打字的想法意味着不需要像do_something_with_type_a
这样的名字。而且,虽然这只是一个借口,但对于任何不明显的事情都有clear documentation。
至于itertools?模块名称并不重要,它只是一组功能。有些功能更清晰(chain
,cycle
,repeat
),有些功能更为清晰(islice
,izip
)。我想我们假设一旦你熟悉Python就像“压缩”和“切片”这样的概念是直截了当的。
sched / asyncore / imghdr:所有这些都是简短而且不具备说明性的,但我从未见过任何使用它们。它们可能追溯到8个字符文件名的时代,更新它们从未成为优先考虑事项。
pickle:古怪,但你真的只需要查看一次,然后很明显。你无法真正称它为“序列化程序”,因为它是针对特定的序列化,而不是通用框架。
答案 1 :(得分:0)
查看PEP 8
亮点:
模块应该有简短的全小写名称
几乎无一例外,类名使用CapWords约定。内部使用的类别还有一个主要的下划线。
函数名称应为小写,并根据需要用下划线分隔,以提高可读性。
然后是Zen of Python。在任何情况下,AFAIK都没有使用由Python社区驱动的明确,描述性和明显名称的处方 - 这取决于开发人员。