Python符号?
我刚开始学习Python,想知道应该用什么样的命名方式。我看过关于Python命名的PEP 8指南,里面大部分内容我都同意,除了函数名称(我更喜欢用混合大小写的风格)。
在C++中,我使用一种修改过的匈牙利命名法,这种命名法不包含类型信息,只包含变量的作用域(比如,lVariable表示局部变量,mVariable表示类的成员变量,g表示全局变量,s表示静态变量,in表示函数的输入,out表示函数的输出)。
我不知道这种命名风格有没有名字,但我在想在Python中不使用这种命名风格是否是个好主意。我对Python还不是特别熟悉,所以你们可能会发现一些我想不到的问题。
我也很想知道你们对此的看法 :) 有些人可能会说这样会让代码不太好读,但我已经习惯了,没有这些标签的代码对我来说反而更难读。
6 个回答
我在代码中违反了PEP8规范。我使用了:
- 方法和函数用小写驼峰命名法(lowercaseCamelCase)
- 以_开头的小写驼峰命名法来表示“私有”方法
- 变量用下划线加空格的方式(underscore_spaced)
- 以_开头的变量表示“私有”的实例变量(属性)
- 类和模块用大写驼峰命名法(CapitalizedCamelCase),不过我正在转向小写模块命名
我一直不喜欢匈牙利命名法。我觉得变量名应该简单明了,能提供足够的信息,让人清楚它在哪里用(哪个范围)以及它的目的是什么,容易阅读,更关注它所指代的意义,而不是那些技术上的复杂术语(比如类型)。
我违反这些规范的原因主要是出于实际考虑和之前的经验。
- 在C++和Java中,类通常用大写驼峰命名法,而成员函数用小写驼峰命名法。
- 我曾在一个代码库中工作,使用下划线前缀来表示私有,但并不是特别私有。我们不想搞乱Python的名称改编(双下划线)。这让我们在单元测试时可以稍微违反一些规范,查看内部类的状态。
使用PEP-8。这在Python界几乎是通用的规范。
(几乎每个Python程序员都会说这样会让代码变得不易读,但我已经习惯了,没有这些标签的代码反而让我觉得更难读)
我帮你修正一下。
说真的,这样做对你有帮助,但会让其他试图阅读你代码的Python程序员感到困惑和烦恼。
其实这并不是特别必要,因为Python本身的特性就让很多事情变得清晰。例如,你绝对不需要用“mVariable”这种形式,因为在Python中是显而易见的:
class Example(object):
def__init__(self):
self.my_member_var = "Hello"
def sample(self):
print self.my_member_var
e = Example()
e.sample()
print e.my_member_var
无论你是通过 self.foo
还是 myinstance.foo
来访问成员变量,始终都能清楚地知道它是一个成员。
其他情况可能没有那么明显,但如果你的代码不够简单,以至于读者在阅读一个函数时不能记住“'names'变量是一个参数”,那你可能就做错了什么。