这些规范你需要上点心
Python是一个极简优雅的语言,大部分初学者,尤其从事数据科学但初学者,在初学Python时,一般会从Python基本语法、基本数据类型学起,但常常会忽略一些基本规则,Python变量命名规则就是其中一个。
当忽略了这些规则时,我们写出来的代码但易读性往往相对较差,更加不便与同行交流学习,更不用说与别人标准但程序集成与统一了。
Python库的命名约定有点混乱,但Python官方还是有做了一些约定,在我们写代码过程中,均遵守了这些约定,在代码可读性、美观性以及实用性都是有益的。
接下来云朵君从下面几个常用的方面总结了一些规则规范,以供参考。
命名样式
只能包含字母、数字和下划线,且不能以数字开头
区分字母大小写
禁止使用保留字(关键字)
>>> # 查看python关键字
>>> import keyword
>>> kw = keyword.kwlist
>>> print(kw)
>>> # 运行结果
['False', 'None', 'True', 'and', 'as',
'yield', 'assert', 'async', 'await', 'break',
'class', 'continue', 'def', 'del','elif',
'else', 'except', 'finally','for', 'from',
'global', 'if', 'import','in', 'is',
'lambda', 'nonlocal', 'not', 'or', 'pass',
'raise', 'return', 'try', 'while', 'with']
通常的命名样式如下[1]
b
(单个小写字母)B
(s单个大写字母)lowercase
(全部小写字母)lower_case_with_underscores
(下划线连接的小写字母)UPPERCASE
(全部大写字母)UPPER_CASE_WITH_UNDERSCORES
(下划线连接的大写字母)CapitalizedWords
(或CapWords或CamelCase。这种命名叫做驼峰式大小写,有时也称为StudlyCaps。注意:在CapWords中使用首字母缩写词时,请使用首字母缩写词的所有字母大写。因此,HTTPServerError比HttpServerError好。)mixedCase
(与大小写字母首字母小写字母不同!)Capitalized_Words_With_Underscores
(下划线连接、首字母大写的写法非常难看)
驼峰式大小写[2]
当变量名和函数名称是由二个或多个单字链接在一起,而构成的唯一识别字时,利用“驼峰式大小写”来表示,可以增加变量和函数的可读性。
单字之间不以空格断开(例:camel case)或连接号(-,例:camel-case)、下划线(_,例:camel_case)链接,有两种格式:
小驼峰式命名法(lower camel case)
第一个单字以小写字母开始;第二个单字的首字母大写,例如:firstName、lastName。
大驼峰式命名法(upper camel case)
每一个单字的首字母都采用大写字母,例如:FirstName、LastName、CamelCase,也被称为Pascal命名法(英语:Pascal Case)
使用前划线或后划线的特殊形式命名惯例
以单一下下划线开头的变量名(_x)不会被
from module import *
语句导入前后有下划线的变量名(__x__)是系统定义的变量名,对python 解释器有特殊意义,例如
__init__
,__ import__
或__file__
。以两个下划线开头但结尾没有下划线的变量名(__x)是类的成员变量,
交互式模式下,变量名 _ 用于保存最后表达式的结果
命名约定
避免使用的名称
切勿将字符 "l"
(小写字母el),"O"
(大写字母oh)或"I"
(大写字母eye)用作单个字符变量名称。在某些字体中,这些字符与数字1和零没有区别。当尝试使用"l"
时,请改用"L"
。
软件包和模块名称
模块应使用简短的全小写名称。如果模块名称可以提高可读性,则可以在模块名称中使用下划线。尽管不鼓励使用下划线,Python软件包也应使用短小写全名。
类名
类名通常应使用驼峰式大小写(CapWords)约定。
在接口被记录并主要用作可调用函数的情况下,可以代替使用函数的命名约定。
请注意,内置名称有一个单独的约定:大多数内置名称是单个单词(或两个单词一起运行),而CapWords约定仅用于异常名称和内置常量。
函数和变量名
变量名与函数名名称应小写,必要时用下划线分隔单词以提高可读性。
# 批量转化为驼峰格式(Camel)
import re
def camel(s):s = re.sub(r"(\s|_|-)+", " ", s).title().replace(" ", "")return s[0].lower() + s[1:]
# 批量转化
def batch_camel(slist):return [camel(s) for s in slist]
以上函数解析如下
\s
指匹配:[ \t\n\r\f\v]
A|B
:表示匹配 A 串或 B 串。
re.sub(pattern, newchar, string):
substitue
代替,用newchar
字符替代与pattern
匹配的字符所有。
title()
: 转化为大写,例子:'Hello world'.title() -> 'Hello World'
。
s = s[0].lower()+s[1:]
将第一个字母转化为小写。
函数和方法参数
始终将self
作为实例方法的第一个参数。始终对类方法的第一个参数使用cls
。
如果函数参数的名称与保留关键字发生冲突,通常最好在末尾附加一个下划线,而不要使用缩写或拼写错误。因此,class_
优于clss
。
常数
常量通常在模块级别定义,并以所有大写字母书写,并用下划线分隔单词。示例包括 MAX_OVERFLOW
和TOTAL
。
总结
做到如下几个方面就会成为一个具有良好编程习惯的程序员。
变量名应该能够描述变量表示的信息。
优先考虑代码的易懂性,而不是编写代码的速度。
采用标准的命名约定,做出一个全局决策而不是多个本地决策。
变量/函数名称:用小写字母表示,中间用下划线分割。
常量:用大写字母。
Class类:首字母大写,其余小写。
参考资料
[1]
python官网: https://www.python.org/dev/peps/pep-0008/#naming-conventions
[2]
维基百科: https://en.wikipedia.org/wiki/Camel_case
-- 数据STUDIO --
这些规范你需要上点心相关推荐
- 驳《编码规范是技术上的遮羞布》自由发挥==摆脱编码规范?X
引子: 看了一坨文字<编码规范是技术上的遮羞布>,很是上火,见人见智,本是无可厚非,却深感误人子弟者众.原文观点做一个简单的提炼: 1.扔掉编码规范吧,让程序员自由发挥,你会得到更多的好处 ...
- 第四章 OAuth2.0规范(史上最详细解释)——获得授权
为了请求访问令牌,客户端从资源所有者获得授权.授权表现为授权许可的形式,客户端用它请求访问令牌.OAuth定义了四种许可类型:授权码.隐式许可.资源所有者密码凭据和客户端凭据.它还提供了扩展机制定义其 ...
- git分支管理规范和gitee上分支开发
git分支管理规范 分支开发图示: 初始化仓库 git init 初始化master vim Readme.md git add . git commit -m "init" 创建 ...
- Webpack 2 视频教程 009 - 配置 ESLint 实现代码规范自动测试 (上)
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- c# 通过解析mp3规范命名并上传服务器
引用using Shell32; private void Open_Click(object sender, RoutedEventArgs e){OpenFileDialog ofd = new ...
- 分享GitHub上一位老外的嵌入式C编码规范(收藏细读)
简 介: 本文分析在头条上分享GitHub上一位老外的嵌入式C编码规范(收藏细读):嵌入式大杂烩. 关键词: 嵌入式,C语句,编程规范 分享GitHub上一位老外的嵌入式C编码规范(收藏细读) §01 ...
- 研究称Instagram上“名人效应”广告的规范率只占7%
6月13日消息,据国外媒体报道,研究发现,Instagram上大批名人在为品牌宣传的帖子中,有93%没有按照美国联邦公平贸易委员会(FTC)的规范来打广告. 你在Instagram上有关注一批名人吗? ...
- mysql学习资料_一不小心,我就上传了 279674 字的 MySQL 学习资料到 github 上了
自从2019年11月我们出版了<千金良方--MySQL 性能优化金字塔法则>一书之后,持续不断有人来询问我MySQL 4 个系统字典库相关的问题,因为篇幅原因,书中并没有完整收录4个字典库 ...
- 实现一个完美符合Promise/A+规范的Promise
原文在我的博客中:原文地址 如果文章对您有帮助,您的star是对我最好的鼓励- 简要介绍:Promise允许我们通过链式调用的方式来解决"回调地狱"的问题,特别是在异步过程中,通过 ...
最新文章
- Sqlite3支持的数据类型 日期函数 Sqlite3 函数
- 我在学python-你们以为我在学C++?其实我在学Python!人生苦短!
- 汇编 加法减法指令 inc dec add sub neg 标志寄存器测试
- linux环境c语言实现who,C语言编程实现Linux命令——who
- php框架设计(图)
- OrCAD分裂元件的使用方法
- 更改span标签样式_CSS 内嵌样式
- java反序列化异常接不到_由Java对象反序列化异常想到的
- OpenCV3学习(2.2)——图像Mat矩阵操作与常用函数
- 好分数阅卷3.0_四川自考阅卷会为了控制通过率故意压分吗?考不过怎么办?
- Java类加载文章2(z)
- 70. Climbing Stairs【leetcode】递归,动态规划,java,算法
- 小结大学计算机基础课程内容报告,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书.doc...
- ReactNative集成百度语音合成
- 掌控你的信息流:在自己的VPS上部署RSSHub
- 游戏攻略 一 天堂W(韩)
- 第17节 三个败家子(17)——少侠孙坚
- 多核时代多线程编程(一)基本策略
- 个人手机网站接入支付宝在线收款功能
- 如何在VM16上安装虚拟机(win7)及联网