Python中参数、局部变量和全局变量的编码规范
在Python中,区分参数、本地变量和全局变量并没有特别简单的方法。一个简单的做法是采用一些编码约定,比如:
- 全局变量以_和大写字母开头
- 参数以_结尾
_Gvariable = 10 def hello(x_, y_): z = x_ + y_
这样做算不算是Python的标准做法呢?也就是说,Python有没有一些公认的编码标准来区分这些东西?
=== 补充说明 ===
我只是想区分参数和本地变量。因为参数是从外部传入的,更像是只读的内存(ROM),并不应该被修改。C++提供了const关键字来防止参数被改变,但Python没有这个功能。我觉得在参数后面加个_可以模拟这种特性。
4 个回答
这真是太糟糕了。没有任何理由要为全局和局部对象使用特殊的命名规则。而且,除非是函数、类或常量,否则你应该尽量避免使用全局对象。
常量的命名应该全部大写,并用下划线分隔,比如像这样:LIKE_THIS;类的命名应该是像这样:LikeThis;而函数和方法的命名可以和其他名字一样。对于那些实现上特定的对象,可能随时会被更改或删除,或者没有其他可靠理由的对象,名字前面应该加一个下划线。
你还应该看看Python的风格指南PEP 8,它涵盖了这些以及更多的命名规则,只要不影响代码的可读性,你就应该遵循这些规则。大多数Python项目都会遵循这个指南,或者至少是一个兼容的版本。
在Python中,通常很容易分辨哪些变量是局部的,哪些是全局的。因为如果你想修改一个全局变量,你需要在函数开始时用global
这个关键词来声明它。不过,有时候即使Python不需要我这样做,我也会加上这个声明,以强调某个对象是全局的,比如说修改一个可变的全局数据结构。
函数的参数很明显,因为它们在函数的声明中就能看到。
正如其他人所说,常量应该用全大写字母并用下划线分隔,这是一种许多编程语言都遵循的约定。
如果你发现自己很难分清哪些是全局变量、局部变量和参数变量,我建议你检查一下你的函数是不是太长、做的事情太多。函数和方法应该简短,并且只做一件事。如果我的函数超过大约10到20行代码,我就会觉得需要重构了。
我推荐你读一下罗伯特·马丁的《整洁代码》这本书。虽然例子是用Java写的,但其中的原则适用于所有编程语言。
我建议你在写Python代码的时候遵循PEP 8的规范。这样,任何需要阅读你代码的人都会感激你。
http://www.python.org/dev/peps/pep-0008/
为什么要区分参数和局部变量呢?其实它们之间的关系就像一个是另一个的子集。如果你在处理局部变量和全局变量的问题时,可以使用 locals()
、globals()
和 vars()
来查看作用域。inspect
模块也能帮助你解决这个问题。而且,如果可以的话,尽量少用全局变量。