我很抱歉 - 我不是在责怪Python.这只是对我认为是否正确的反思.作为Python奉献者已经两年了,无论我走到哪里,我都只编写小应用程序并歌颂Python的赞美.我最近有机会阅读Django的代码,并开始怀疑Python是否真的遵循其"可读性计数"理念.例如,
class A: a = 10 b = "Madhu" def somemethod(self, arg1): self.c = 20.22 d = "some local variable" # do something .... ... def somemethod2 (self, arg2): self.c = "Changed the variable" # do something 2 ...
在使用时创建实例变量的情况下(即self.c
在上面的代码片段中),很难跟踪代码流.在读取以这种方式编写的大量代码时,无法确定定义了哪些实例变量.即使只用6-8种方法读取一个类并且不超过100-150行代码,它也会变得非常令人沮丧.
我有兴趣知道我对这段代码的阅读是否因C++/Java风格而有所偏差,因为大多数其他语言都采用与它们相同的方法.是否有Pythonic方式更流畅地阅读此代码?是什么让Python开发人员采用这种策略,记住"可读性计数"?
您提供的代码片段相当不典型(也可能因为您可能已经完成了):
你通常不会有一个实例变量(self.c),它是某个点的浮点数,而是一个不同点的字符串.它应该始终是数字或字符串.
您通常不会在任意方法中将实例变量置于生命中.相反,您通常有一个构造函数(__init__)来初始化所有变量.
您通常没有名为a,b,c的实例变量.相反,他们有一些说话的名字.
通过这些修复,您的示例将更具可读性.
一个足够有才能的歹徒可以用任何语言编写不可读的代码.Python试图在结构和命名上强加一些规则,以便在正确的方向上轻推编码器,但是没有办法强迫这样的事情.
对于它的价值,我尝试将局部变量的范围限制在我使用的每种语言中它们被使用的区域- 对我来说,不需要维护一个庞大的心理词典使我重新熟悉一些代码更容易.