Python 为什么推荐蛇形命名法?
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
关于变量的命名,这又是一个容易引发程序员论战的话题。如何命名才能更具有可读性、易写性与明义性呢?众说纷纭。
本期“Python为什么”栏目,我们将聚焦于变量命名中的连接方式,来切入这块是非之地,想要回答的问题是——Python 为什么要推荐蛇形命名法?
首先一点,对于单个字符或者单词 (例如:a、A、PYTHON、Cat),当它们被用作变量名时,大致有全小写、全大写和首字母大写这几种情况。编程语言中出现这些情况时,它们基本上跟英语的表达习惯是相同的。
但是,编程语言为了令变量名表达出更丰富的含义,通常需要使用多个单词或符号。 英语习惯使用空格来间隔开单词,然而这种用法在编程语言中会带来一些麻烦,所以程序员们就创造出了另外的方法:
- 蛇形命名法(snake case)
- 驼峰命名法(camel case)
- 匈牙利命名法(HN case)
- 帕斯卡命名法(Pascal case)
- 脊柱命名法(spinal case)
- 自由命名法(studly caps)
- 驼峰蛇形命名法
总体而言,这些命名法都是要克服单词间的空格,从而把不同单词串连起来, 最终达到创造出一种新的“单词”的效果。
我画了一张思维导图,大略区分了这几种命名法:
如果按照受众量与知名程度排名,毫无疑问排前两位的是驼峰命名法和蛇形命名法。
我们可以简单比较一下它们的优缺点:
- 可读性:蛇形命名法用下划线拉大词距,更清楚易读;驼峰命名法的变量名紧凑,节省行宽
- 易写性:驼峰命名法以大小写为区分,不引入额外的标识符;蛇形命名法统一小写,输入相对方便
- 明义性:对于某些缩写成的专有名词,例如 HTTP、RGB、DNS等等,一般习惯全用大写表示,但是如果严格遵循这两种命名法的话,须得只留首字母大写或者全小写,这样对原意都会造成一些“破坏”,有时候甚至让人感觉到别扭。如果保留全大写,IDE 可能识别不准,反而会出现波浪提示
由此可见,它们各有优缺点,但哪一方都不具有压倒性。我个人稍微偏好于蛇形命名法,但是在需要用驼峰命名的时候(比如写 Java 时),也能无障碍切换。
需要指出的是,Python 也推荐使用驼峰式命名,那是在类名、Type 变量、异常 exception 名这些情况。而在包名、模块名、方法名和普通变量名 等情况,则是推荐用蛇形命名(lower_case_with_underscores)。
那么,为什么 Python 会推荐用蛇形命名法呢?
最大的原因是历史原因。 蛇形命名方式起源于 1960 年代,那时它甚至还没有特定的名称。Python 从 C 语言中借鉴过来后,给它起名为“lower_case_with_underscores”,即带下划线的小写命名。
直到 21 世纪初的几年,在 Intel 和 Ruby 社区中,才有人开始以“snake_case”即蛇形命名来称呼它。
现今有不少编程语言在某些场景下会推荐使用蛇形命名法,而 Python 则是其中最早这么做的之一,并且是使用场景最多的语言之一。
维基百科上统计了一份清单,可以看出 Python 对它的偏好:
其次,还有一个比较重要的原因,那就是 Python 对下划线“_”的独特偏爱。
比如类似于 xx、__xx、xx_、__xx_ 等等的写法就随处可见,甚至还有孤零零一个下划线 _ 作为变量的特殊情况。这样看来,下划线作为单词间的连接,恰恰是这种传统习惯的一部分。
最后,我还看到过一种解释:因为 Python 是蟒蛇啊,理所当然是用蛇形命名……
对于这三个解释,你们是如何感想的呢?对于蛇形命名法,大家是喜欢还是不喜欢呢?欢迎留言交流。
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-06-17
本文作者:豌豆花下猫
本文来自:“掘金”,了解相关信息可以关注“掘金”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
程序员退休后,各种编程语言的遗留系统怎么办?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 当我们将时间浪费在谈论大型机时,殊不知技术衰败的威胁已经迫在眉睫。 每当我接到采访请求,或者被邀请谈论我在遗留技术现代化方面的工作时,每个人都想谈论大型机和 COBOL。人们认为,我会给其他工程师讲一些有趣的战争故事,关于老旧系统的苦差事,这些工程师无须担心这些事情,因为他们的职业专注于现代技术。 当然,当我开始处理遗留系统时,我也被最古老的节目李普利的《信不信由你》 (Ripley’s Believe It or Not!)(译注:1921 年由李普利推出)给吸引住了。挖掘和剖析老旧系统的快感,发现大多数程序员从未听说过的、被遗忘的语言,更不用说与之交互了。我一直着迷于低级语言和系统,它们将电压变化转化成数学和设计中的抽象概念,这是一种什么样的魔法啊!但最近,我对即将到来的遗留启示录,以及如何减缓新技术带来的技术债务不断上升的水平更感兴趣了。 遗留启示录并不是婴儿潮一代最后一个 COBOL 程序员的离世。说实话,这场危机来得快,走得也快。当人们谈论老旧系统的威胁时,他们喜欢搬出有关 C...
- 下一篇
BigDecimal使用不当,老板的损失照样从你工资里扣
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 我们基本已经形成了常识,需要用到金钱的地方要用 BigDecimal 而不是其他,而我们也都知道浮点型变量在进行计算的时候会出现丢失精度的问题。 那么,你知道其实 BigDecimal 也会丢失精度吗?而使用 BigDecimal 的背后又有什么值得去探究的地方吗?今天,告诉你,知其然,也知其所以然。 如下一段代码: System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.42); System.out.println(4.015 * 100); System.out.println(123.3 / 100); 输出:0.0600000000000000050.5800000000000001401.499999999999941.2329999999999999 可以看到在 Java 中进行浮点数运算的时候,会出现丢失精度的问题。那么我们如果在进行商品价格计算的时候,就会出现问题。很有可能造成我们手中有 0.06 元,却无...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群