关于python中带下划线的变量和函数的意义
变量:
1. 前带_的变量: 标明是⼀个私有变量, 只⽤于标明, 外部类还是可以访问到这个变量
2. 前带两个_ ,后带两个_ 的变量: 标明是内置变量,
func_path = os.path.dirname(os.path.abspath(__file__))
3. ⼤写加下划线的变量: 标明是不会发⽣改变的全局变量
函数:
1. 前带_的变量: 标明是⼀个私有函数, 只⽤于标明,
2. 前带两个_ ,后带两个_ 的函数: 标明是特殊函数
if __name__ == '__main__':
(Python ⽤下划线作为变量前缀和后缀指定特殊变量。
_xxx 不能⽤'from module import *'导⼊
__xxx__ 系统定义名字
__xxx 类中的私有变量名
核⼼风格:避免⽤下划线作为变量名的开始。
因为下划线对解释器有特殊的意义,⽽且是内建标识符所使⽤的符号,我们建议程序员避免⽤下划线作为变量名的开始。⼀般来讲,变量名_xxx被看作是“私有的”,在模块或类外不可以使⽤。当变量是私有的时候,⽤_xxx 来表⽰变量是很好的习惯。因为变量名__xxx__对Python 来说刑厥⼡ 澹 杂谄胀ǖ谋淞坑Φ北苊庹庵置 绺瘛?br>
"单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象和⼦类对象⾃⼰能访问到这些变量;
"双下划线 " 开始的是私有成员,意思是只有类对象⾃⼰能访问,连⼦类对象也不能访问到这个数据。
违章停车扣几分以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接⼝进⾏访问,不能⽤“from xxx import *”⽽导⼊;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python⾥特殊⽅法专⽤的标识,如 __init__()代表类的构造函数。)
1 变量
常量 : ⼤写加下划线
USER_CONSTANT
对于不会发⽣改变的全局变量,使⽤⼤写加下划线。
私有变量 : ⼩写和⼀个前导下划线
_private_value
Python 中不存在私有变量⼀说,若是遇到需要保护的变量,使⽤⼩写和⼀个前导下划线。但这只是程序员之间的⼀个约定,⽤于警告说明这是⼀个私有变量,外部类不要去访问它。但实际上,外部类还是可以访问到这个变量。笋干老鸭汤
内置变量 : ⼩写,两个前导下划线和两个后置下划线
__class__
两个前导下划线会导致变量在解释期间被更名。这是为了避免内置变量和其他变量产⽣冲突。⽤户定
义的变量要严格避免这种风格。以免导致混乱。
2 函数和⽅法
西湖道
总体⽽⾔应该使⽤,⼩写和下划线。但有些⽐较⽼的库使⽤的是混合⼤⼩写,即⾸单词⼩写,之后每个单词第⼀个字母⼤写,其余⼩写。但现在,⼩写和下划线已成为规范。
私有⽅法:⼩写和⼀个前导下划线
def _crete(lf):
print "don't test me."刘禹锡是哪个朝代的
这⾥和私有变量⼀样,并不是真正的私有访问权限。同时也应该注意⼀般函数不要使⽤两个前导下划线(当遇到两个前导下划线时,Python 的名称改编特性将发挥作⽤)。特殊函数后⾯会提及。
特殊⽅法:⼩写和两个前导下划线,两个后置下划线
冰片的功效def __add__(lf, other):
return int.__add__(other)
这种风格只应⽤于特殊函数,⽐如操作符重载等。
函数参数 : ⼩写和下划线,缺省值等号两边⽆空格
def connect(lf, ur=None):
lf._ur = ur
3 类
类总是使⽤驼峰格式命名,即所有单词⾸字母⼤写其余字母⼩写。类名应该简明,精确,并⾜以从中理解类所完成的⼯作。常见的⼀个⽅法是使⽤表⽰其类型或者特性的后缀,例如:
SQLEngine
MimeTypes
对于基类⽽⾔,可以使⽤⼀个 Ba 或者 Abstract 前缀
BaCookie
AbstractGroup
class UrProfile(object):
def __init__(lf, profile):
return lf._profile = profile
def profile(lf):
return lf._profile
4 模块和包
除特殊模块 __init__ 之外,模块名称都使⽤不带下划线的⼩写字母。
无量塔姬子
若是它们实现⼀个协议,那么通常使⽤lib为后缀,例如:
import smtplib
一战爆发的根本原因import os
import sys
5 关于参数
5.1 不要⽤断⾔来实现静态类型检测
断⾔可以⽤于检查参数,但不应仅仅是进⾏静态类型检测。 Python 是动态类型语⾔,静态类型检测违背了其设计思想。断⾔应该⽤于避免函数不被毫⽆意义的调⽤。
5.2 不要滥⽤ *args 和 **kwargs
*args 和 **kwargs 参数可能会破坏函数的健壮性。它们使签名变得模糊,⽽且代码常常开始在不应该的地⽅构建⼩的参数解析器。
6 其他
6.1 使⽤ has 或 is 前缀命名布尔元素
is_connect = True
has_member = Fal
6.2 ⽤复数形式命名序列
members = ['ur_1', 'ur_2']
6.3 ⽤显式名称命名字典
person_address = {'ur_1':'10 road WD', 'ur_2' : '20 street huafu'}
6.4 避免通⽤名称
诸如 list, dict, quence 或者 element 这样的名称应该避免。
6.5 避免现有名称
诸如 os, sys 这种系统已经存在的名称应该避免。
7 ⼀些数字
⼀⾏列数 : PEP 8 规定为 79 列,这有些苛刻了。根据⾃⼰的情况,⽐如不要超过满屏时编辑器的显⽰列数。这样就可以在不动⽔平游标的情况下,⽅便的查看代码。
⼀个函数 : 不要超过 30 ⾏代码, 即可显⽰在⼀个屏幕类,可以不使⽤垂直游标即可看到整个函数。
⼀个类 : 不要超过 200 ⾏代码,不要有超过 10 个⽅法。
⼀个模块不要超过 500 ⾏。
8 验证脚本
可以安装⼀个 pep8 脚本⽤于验证你的代码风格是否符合 PEP8。
野鸡学校
>>easy_install pep8
>>pep8 -r --ignoire E501 Test.py
这个命令⾏的意思是,重复打出错误,并且忽略 501 错误(代码超过 79 ⾏)。