文档章节

python naming convention

Simon253
 Simon253
发布于 2015/01/22 06:24
字数 1196
阅读 28
收藏 0

一,包名、模块名、局部变量名、函数名

全小写+下划线式驼峰

example:this_is_var

二,全局变量

全大写+下划线式驼峰

example:GLOBAL_VAR

三,类名

首字母大写式驼峰

example:ClassName()

四,关于下划线

  1. 以单下划线开头,是弱内部使用标识,from M import * 时,将不会导入该对象(python 一切皆对象)。
  2. 以双下划线开头的变量名,主要用于类内部标识类私有,不能直接访问。模块中使用见上一条。
  3. 双下划线开头且双下划线截尾的命名方法尽量不要用,这是标识

example for 1:

module_1 模块中定义变量 var_1, _var_2, __var_3

#module_1  var_1
_var_2 __var_3

module_2 模块中代码如下:

复制代码
1 #module_2_error 2 ''' 3 以下划线开头的变量不会别导入 4 ''' 5 from module_1 import * 6 7 print var_1 8 print _var_2 #将报错 9 print __var_3 #将报错
复制代码

执行到第6,7行将会报错,因为凡是以下划线开头的对象都不会被导入。

既然是弱内部使用标识,就还是有使用办法的,只需单独导入即可:

复制代码
1 #module_2_solution 2 3 from module_1 import * # 导入所有的不是下划线开头的对象 4 5 from module_1 import _var_2, __var_3 # 显式导入下划线开头的对象 6 7 print var_1 8 print _var_2 # 不会报错 9 print __var_3 # 不会报错
复制代码

example for 2:

复制代码
 1 #module_error  2 '''  3 双下划线开头的变量不能被直接访问  4 '''  5  6 class MyClass():  7 def __init__(self):  8 self.var_1 = 1  9 self._var_2 = 2 10 self.__var_3 = 3 11 12 if __name__=="__main__": 13 obj = MyClass() 14 print obj.var_1 15 print obj._var_2 16 print obj.__var_3 # 这里将会出错
复制代码
复制代码
#module_solution ''' 需要定义函数来获取双下划线开头的变量 ''' class MyClass(): def __init__(self):
        self.var_1 = 1 self._var_2 = 2 self.__var_3 = 3 def get_var_3(self): return self.__var_3 if __name__=="__main__":
    obj = MyClass() print obj.var_1 print obj._var_2 print obj.get_var_3() # 不会再报错
复制代码

四,其他要注意的

  • 不要像c等语言里面一样去用开头字母标识变量类型(如 iValue),因为python在解释的时候才确定类型。
  • 因为异常也是一个类,所以遵守类的命名规则。此外,如果异常实际上指代一个错误的话,应该使用“Error”做后缀。
  • 命名应当尽量使用全拼写的单词,缩写的情况有如下两种:常用的缩写,如XMLID等,在命名时也应只大写首字母,如XmlParser。命名中含有长单词,对某个单词进行缩写。这时应使用约定成俗的缩写方式。例如:function 缩写为 fn, text 缩写为 txt, object 缩写为 obj, count 缩写为 cnt, number 缩写为 num 等。
  • 类实例方法第一个参数使用self, 类方法第一个参数使用cls

五,最后,把一些英文说明作为备注

Package and Module Names               

   Modules should have short, all-lowercase names.  Underscores can be used

      in the module name if it improves readability.  Python packages should

      also have short, all-lowercase names, although the use of underscores is

      discouraged.     
                Since module names are mapped to file names, and some file systems are

      case insensitive and truncate long names, it is important that module

      names be chosen to be fairly short -- this won't be a problem on Unix,

      but it may be a problem when the code is transported to older Mac or

      Windows versions, or DOS.

 

Class Names

      Almost without exception, class names use the CapWords convention.

      Classes for internal use have a leading underscore in addition.

 

 Exception Names

      Because exceptions should be classes, the class naming convention

      applies here.  However, you should use the suffix "Error" on your

      exception names (if the exception actually is an error).

 

Global Variable Names

        (Let's hope that these variables are meant for use inside one module

      only.)  The conventions are about the same as those for functions.

        Modules that are designed for use via "from M import *" should use the

      __all__ mechanism to prevent exporting globals, or use the older

      convention of prefixing such globals with an underscore (which you might

      want to do to indicate these globals are "module non-public").

 

  Function Names

      Function names should be lowercase, with words separated by underscores

      as necessary to improve readability.

      mixedCase is allowed only in contexts where that's already the

      prevailing style (e.g. threading.py), to retain backwards compatibility.

 

 Function and method arguments

      Always use 'self' for the first argument to instance methods.

      Always use 'cls' for the first argument to class methods.

      If a function argument's name clashes with a reserved keyword, it is

      generally better to append a single trailing underscore rather than use

      an abbreviation or spelling corruption.  Thus "print_" is better than

      "prnt".  (Perhaps better is to avoid such clashes by using a synonym.)

 

Method Names and Instance Variables

      Use the function naming rules: lowercase with words separated by

      underscores as necessary to improve readability.

      Use one leading underscore only for non-public methods and instance

      variables.

      To avoid name clashes with subclasses, use two leading underscores to

      invoke Python's name mangling rules.

      Python mangles these names with the class name: if class Foo has an

      attribute named __a, it cannot be accessed by Foo.__a.  (An insistent

      user could still gain access by calling Foo._Foo__a.)  Generally, double

      leading underscores should be used only to avoid name conflicts with

      attributes in classes designed to be subclassed.

      Note: there is some controversy about the use of __names (see below).

 

Constants

       Constants are usually defined on a module level and written in all

       capital letters with underscores separating words.  Examples include

       MAX_OVERFLOW and TOTAL.

本文转载自:http://www.cnblogs.com/wolf-bing/archive/2013/06/12/3132594.html

上一篇: 3 Sum 解法
Simon253
粉丝 4
博文 94
码字总数 114771
作品 0
美国
私信 提问
SonarLint for IntelliJ 2.3 发布,连接模式改进

SonarLint for IntelliJ 2.3 发布了,这个新版本带来了连接模式的改进。 首先,写在自定义规则上面的现有分析仪比如java或JavaScript现在已经支持SonarLint。但是,嵌入这些规则的插件必须首...

oschina
2016/08/06
1K
0
SonarLint for Command Line 2.0 发布

SonarLint for Command Line 2.0 发布。新版本带来了新的连接方式:Sonarlint现在可以使用和SonarQube项目实例分析相同的配置。 首先,质量配置文件和规则所使用的SonarQube实例现在正为Son...

oschina
2016/08/18
765
0
PostgreSQL 11 preview - jsonb_plpython, jsonb_plperl 插件, PG类型jsonb与pyton,perl程序类型的相互转换

标签 PostgreSQL , plpython , perl , jsonb , 存储过程 , 函数 , TRANSFORM , SQL类型与编程语言内部类型相互转换 , 增强 , 11 背景 PostgreSQL 支持多种内部存储过程语言,不同的语言对数据...

德哥
2018/07/28
0
0
如何用 C++ 为 Python 写 dll

如何用 C++ 为 Python 写 dll 来自: http://zhongwei-leg.iteye.com/blog/693519 博客分类: C++ CC#C++PythonOS 1. 先新建一个名为 hello.cpp 的 C++ 源文件: #include <stdio.h> #define......

FreeBlues
2012/07/17
258
0
Cycle.js v6.0.0 Nested 发布,人机交互 JS 框架

Cycle Nested 是个全新的 Cycle.js 版本,主要关注硬核的复用:任意 Cycle.js 应用都可以很容易在更大的 Cycle.js 应用中复用。 Cycle.js Nested 包括: Cycle Core v6.0.0 + Cycle HTTP Dri...

oschina
2015/12/22
2.4K
2

没有更多内容

加载失败,请刷新页面

加载更多

官方来源的 Duo Mobile App 解决了我的 Network Difficulties 问题

https://help.duo.com/s/article/2094?language=en_US 我利用百度搜索下载了一个 Duo Mobile App (由于 Google Play)在大陆不可用。 在扫描旧手机上的 Duo Mobile App 的二维码时, 显示出错...

圣洁之子
1分钟前
0
0
Zabbix监控Mysql容器(Docker容器)主从是否存活

1、在Zabbix Web端创建模板

abowu
3分钟前
0
0
基于 RocketMQ 的同城双活架构在美菜网的挑战与实践

本文整理自李样兵在北京站 RocketMQ meetup分享美菜网使用 RocketMQ 过程中的一些心得和经验,偏重于实践。 嘉宾李样兵,现就职于美菜网基础服务平台组,负责 MQ ,配置中心和任务调度等基础...

大涛学长
9分钟前
0
0
设计模式之:外观模式和桥接模式

作者:DevYK 链接:https://juejin.im/post/5d7e01f4f265da03b5747aac 外观模式 介绍 外观模式 (Facade) 在开发过程中的运用评率非常高,尤其是在现阶段,各种第三方 SDK “充斥” 在我们周边...

Java架构Monster
10分钟前
0
0
人证合一核验设备

人脸身份验证机,人证合一设备1:N如我们现在在车站或一些重要的场所如步行街、城中村等人流密集的场所应用的人脸识别布控系统,其特点是动态和非配合。所谓的动态也就是识别的不是照 片,不是...

非思丸智能
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部