python为什么是蟒蛇_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 是蟒蛇啊,理所当然是用蛇形命名……

对于这三个解释,你们是如何感想的呢?对于蛇形命名法,大家是喜欢还是不喜欢呢?欢迎留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化工具Navicat for MySQL-操作三

五、备份和还原MySQL数据库 在数据库的管理中,备份和还原是必须做认真做的事情,如果疏忽或者做粗糙了,那么一旦数据库故障后果不堪设想,所以Navicat同样也有备份和还原的功能,相比较创建功能,其备份功能则…

python mysql返回,python操作mysql数据-执行语句返回值直接返回字典类型

fetchall()将结果放在二维数组里面,每一行的结果在元组里面import pymysqldef export(table_name):conn pymysql.connect(host 118.24.3.40,user jxz,password,dbjxz,port3306,charset utf8)cur conn.cursor()cur.execute(select * from %s%table_name)print(cu…

如何在python中打开文件_Python文件处理:创建、打开、追加、读、写

在Python中,不需要导入外部库来读取和写入文件。Python为创建、写入和读取文件提供了内置的函数。 在本文中,我们将学习 如何创建文本文件 如何将数据附加到文件中 如何读取文件 如何逐行读取文件 Python中的文件模式 如何创建文本文件 使用Python&#…

python中response.text_Sanic response text() 函数用法和示例

response.text() 功能:Sanic 返回纯文本内容给浏览器。作为一个完整功能的web网站,一般是不会返回纯文本内容的,特殊情况下可选择使用本函数。response.text() 语法def text(body,status200, headersNone,content_type"text/plain;chars…

天池 在线编程 排名查询

文章目录1. 题目2. 解题1. 题目 描述 给一个二维数组scores表示每个学生的各科成绩&#xff0c;求出学生中总成绩排名第K的索引。 如果成绩一样&#xff0c;越早出现的排名越高。 0 < scores[i][j] < 100 示例&#xff1a; 输入: scores: [[90, 80, 70], [90, 90, 90],…

matlab处理亮度不均匀,校正亮度不均匀问题并分析前景对象

预处理图像将图像读入工作区。I imread(rice.png);imshow(I)图像中心的背景亮度比底部亮度高。预处理图像&#xff0c;使背景亮度更加均匀。第一步&#xff0c;使用形态学开运算删除所有前景(米粒)。开运算会删除无法完全包含结构元素的小对象。定义半径为 15 的盘形结构元素&…

[CentOS] 打造vim环境

安装vim yum install vim-enhanced 安装git rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmyum install git 安装bundle插件 git clone https://github.com/gmarik/vundle.git /data/vim/bundle/vundle 配置vim vim /etc/vimrc 在文件…

python接活网站_python能自己接活_python开发接活 - CSDN

Python远程连接oracle数据库概要1。Python连接数据库代码:def oracledbConnect(自我):试题:康涅狄格州 cx_ (\u201Cmdm\u201D、\u201Cnetqin123\u201D,\u201C: 1521 \/敏捷\u201D)光标 ()(\u201Cselect * from t_user \直接安装oracle数据库客户端:安装win32_11gR2_。4. 安装in…

python调用metasploit自动攻击_Python实现远程调用MetaSploit的方法

本文较为详细的讲述了Python实现远程调用MetaSploit的方法&#xff0c;对Python的学习来说有很好的参考价值。具体实现方法如下&#xff1a;(1)安装Python的msgpack类库&#xff0c;MSF官方文档中的数据序列化标准就是参照msgpack。rootkali:~# apt-get install python-setupto…

oracle 02085,OracleDBLink创建和维护以及ORA-02085解决办法

今天业务需要&#xff0c;要跨库查询Oracle数据&#xff0c;于是想到了dblink, 下面一一细说&#xff0c;Oracle DBLink。今天业务需要&#xff0c;要跨库查询Oracle数据&#xff0c;于是想到了dblink, 下面一一细说&#xff0c;&#xff0c;Oracle DBLink。首先Oracle DBLink …

C#单例模式详解

C#要实现单例模式必须要有以下三点&#xff1a; 声明私有静态成员、私有化构造函数、静态函数返回实例。 private static GameManager s_GameManagernull;private GameManager(){}public static GetInstance(){if(!s_GameManager){s_GameManagernew GameManager();}return s_Ga…

python的使用说明_Python 的基本使用说明

#-*- coding: utf-8 -*-#/usr/bin/env python Python中默认的编码格式是 ASCII 格式&#xff0c;在没修改编码格式时无法正确打印汉字&#xff0c;所以在读取中文时会报错。 解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #codingutf-8 就行了 #导入模块 cnf#imp…

notepad python设置_NotePad++上配置Python

1.安装好python以及notepad2.打开notepad点击"运行"菜单->"运行"按钮(或者直接按F5)在弹出的窗口内输入以下命令(命令解释见文尾)后点击“保存”&#xff1a;cmd /k cd /d "$(CURRENT_DIRECTORY)" & python "$(FULL_CURRENT_PATH)&q…

oracle将字段nullable设为Y,从DB模型中消除NULLable列的选项(为了避免SQL的三值逻辑)?...

不久之前,我一直在阅读SQL and Relational Theory by C. J. Date一书.作者因批评sql的三值逻辑(3VL)而闻名.1)作者强调了为什么在sql中应该避免使用3VL,但他没有概述如果不允许使用可空列的数据库模型的样子.我已经考虑了一下,并提出了以下解决方案.如果我错过了其他设计方案,我…

在Delphi中使用indy SMTP发送gmail邮件[转]

在Delphi中使用indy SMTP发送gmail邮件[转] 2012-01-01 22:44:30| 分类&#xff1a; Delphi | 标签&#xff1a; |举报 |字号大中小 订阅 在Delphi中发送email很简单&#xff0c;发送ssl方式的gmail邮件也很简单&#xff0c;只要在使用的idSMTP上附加一个TIdSSLIOHandlerS…

LeetCode 1797. 设计一个验证系统(map)

文章目录1. 题目2. 解题1. 题目 你需要设计一个包含验证码的验证系统。 每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。 如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可能与之前…

git add remote_使用git管理嵌入式软件版本

点击上方蓝字关注我哦&#xff5e;你现在的Keil工程的版本控制是怎么管理的&#xff1f;可能有些人的做法是发布一个版本软件后将代码打一个包保存起来&#xff0c;作为此版本的备份。有一种常见的情况&#xff0c;当开始一项新功能的开发&#xff0c;并且最终的效果不理想老板…

xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?

作为IT人员&#xff0c;想必都知道Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Xshell作为专业的终端模拟器&#xff0c;可以用来登录Linux&#xff0c;从而通过命令来控制Linux系统&…

PHP允许输入负数,php exec在linux中返回值不能为负数

php exec在linux中返回值不能为负数有需要的朋友可参考一下。我们先来了解一下关于exec函数的使用方法exec()原型&#xff1a; 代码如下复制代码string exec (string command [, string array [, int return_var]])exec ()函数与system()类似&#xff0c;也执行给定的命令&…

自我祝贺

博客火了这么久&#xff0c;微博火了这么久。这段时间总感觉自己要做点什么。从04年伊始的马上有钱&#xff0c;到04年结束的马拉个币。我终于觉得&#xff0c;想要和大家一起分享&#xff0c;我这马年的苦逼的工作。第一篇博客想了好久&#xff0c;该写点什么&#xff0c;应该…