ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Python函数命名规范:好名字让代码自己会说话

2026/9/28 7:21:23 拓冰建站 浏览量
Python函数命名规范:好名字让代码自己会说话 写函数这件事很多孩子和我当年一样一开始都会问为什么要给函数起名字直接在括号里算不行吗可等代码量一上来碰到满屏的func1、calc、a()甚至连自己都看不懂的时候就知道函数命名这件事远比想象中重要。这门少儿 Python 编程课的第 12 课我们不写新代码、不学新语法只专心把“给函数起名字的好习惯”聊透。这课适合三种人正在教孩子编程的家长、少儿编程机构的老师以及刚入门 Python、写函数还没养成章法的初学者。“给函数起名字”听起来是小事但顺着函数名读代码是程序员每天都在做的事这一点做好了后面学项目、学爬虫、学算法写出来的代码别人一看就懂自己也少走弯路。1. 函数名的分量为什么命名是编程里的“小事大坑”函数是代码的组织单元说白了就是给一串动作起个名字之后想重复做这件事只要喊这个名字就行。可恰恰因为“就是起个名字”很多孩子会随手敲几个字母应付了事。我见过太多把函数叫a、b、f1的代码了乍一看好像没毛病程序也能跑但真正出问题的时候这种名字会把人坑惨。1.1 从一条报错信息说起假设你写了一个函数用来计算一个班期末成绩的总分名字随手起了一个f 1。过两天成绩一变、班里加了新同学你打开代码想改看到f1的时候至少要花十秒钟想一想f1 是什么是总分、平均分、还是及格率如果是隔了一个月再来看这段代码不是十秒钟了可能五分钟都缓不过神。真正的编程时间分配很有意思敲代码只占一小部分大部分时间都在“读代码”。读自己写的读别人写的读三个月前写的。函数名就是代码的“路标”路标写清楚了顺着走很轻松路标写得稀里糊涂每一步都得停下来猜效率大打折扣。1.2 函数名到底在向谁说话很多孩子以为函数名是写给电脑看的这是一个很深的误解。电脑根本不关心函数叫什么名字它只关心函数体里写了什么指令。函数名实际上是写给“人”看的是让你和一起写代码的人以及未来的自己能看懂这段代码是干嘛的。Python 社区有个流传很广的说法叫“代码是写给人看的只是顺便让机器执行”。函数名就是人和代码之间最重要的交流界面。孩子越早明白这一点写代码的思维方式就越接近正规军。所以我在课堂上会把每个函数名都当成一句“半句话”来讨论函数是动词变量是名词。变量存的是东西函数做的是动作。score是一个东东calculate_score是一个动作。这个区别孩子很容易理解和记住。2. Python 函数命名的三条硬规矩与两条软建议Python 对标识符的命名有一套约定俗成的规范集中写在官方文档里的 PEP 8 风格指南中。这不是编译器强制的错了程序照样能跑但全世界的 Python 开发者都默契地遵守它。不打不相识孩子尽早学会这套规范以后看开源项目、看别人的代码就不会觉得陌生。2.1 三条硬规矩小写、下划线、动词开头第一条函数名一律用小写字母。不是非要稳重而是 Python 社区约定函数名和变量名统一小写这样看到一个大写开头的名字大家下意识会以为是类阅读的时候不会搞混。第二条名字里的多个单词用下划线隔开。比如calculate_total_score、get_user_age这种风格专业说法叫snake_case看起来就像一条蛇贴着地面爬。Python 里推荐的就是这个不用像 Java、JavaScript 那样用驼峰写法calculateTotalScore。不是驼峰不好而是在 Python 的世界里下划线风格才是“本地口音”。第三条函数名尽量以动词开头。前面说过函数是动词那名字就该先说是“做什么动作”再说“对谁做”。比如save_file、load_data、print_report一眼就知道是保存文件、加载数据、打印报告。反过来如果写成file_save、data_load虽然也看得懂但不符合“动作在前”的习惯读起来总有点别扭。2.2 两条软建议别用单字母、避开内置函数名硬规矩是底线但只有底线远远不够还得加上两条软建议。第一尽量别用单字母做函数名。有些教材里为了省事会用f(x)、g(y)表示函数这是数学里的写法编程时应当避免。单字母名字信息量为零完全没起到沟通作用。你可能觉得a比calculate_average打字快多了但读代码时省下的那一秒钟会在改代码时花十分钟补回来。第二不要和 Python 内置函数重名。Python 本身带了一批现成函数比如print、input、sum、max。要是有孩子一不留神写了个def sum(...)后面再想用系统自带的sum求和就会出各种诡异的问题。养成检查名字的习惯相当于给未来的自己少埋了一个雷。命名方式示例评价小写下划线calculate_scorePython 推荐驼峰命名calculateScore其他语言习惯Python 里不推荐全大写CALCULATE_SCORE在 Python 里通常是常量不适合做函数名单字母a信息量为零坚决避开缩略过度clcscr谁也看不懂不推荐与内置函数重名sum容易引发奇怪错误坚决避开3. 好名字的三个层次从“不错”到“让人一眼懂”知道规范还不够起名字这道题更像“写作”而不仅仅是“语法”。我给孩子们总结了三个层次每上一层代码的好读程度就翻一翻。3.1 第一层准确最基础的要求是名字要对得上功能。写一个函数算数字列表的平均数叫calculate_average没问题。可如果这个函数里面其实是取最大值那名字就是“说谎”了比含糊的名字更坑人因为看名字的人会产生错误预期。每一处有过这种经历的人都会懂当你对着一个叫get_total却返回平均值的函数排查半天 bug最后发现是函数名骗了你那种崩溃感很难形容。3.2 第二层完整准确之后让名字尽量完整表达意图。孩子写作业时经常有这种对话我这个函数是干什么的孩子算平均分。我那它应该叫什么孩子average。我Average 是个名词作为名字也说得过去不过加上动作会更好叫calculate_average怎么样别小看这一点区别。函数名以动词开头读代码的时候脑子里自然就串起了“做什么动作、处理什么数据”的信息。等孩子养成习惯以后不管是读还是写效率都会高一大截。如果你想让意思更精确还可以加数据来源calculate_average_score清楚说明算的是分数的平均值。但别走极端名字不是越长越好后面单独说这个坑。3.3 第三层有信息量最高层次是让函数名能把参数也顺带交代明白。还是算平均分这个功能如果函数的参数同时传了每个同学的各科成绩函数名直接叫calculate_final_score就很好因为它已经告诉看代码的人这函数算的是某个同学的期末总评而不是所有同学的平均分。起名时多想想“我这句话说完整了吗”孩子写的函数名会一次比一次有味道。我做了一个非常简单的小练习课堂上经常用故意把函数名遮住只给函数体让孩子先猜这个函数是干嘛的然后给它起名再反过来只给函数名让孩子猜函数体长什么样。一来一回孩子对名字和功能之间关系的感受会特别直观。这就是后面那堂小游戏课的雏形。4. 一次完整的改名演练学期总评计算器的“整容”过程光讲道理还是抽象来看一个真实场景。有个孩子写过这样一个函数用来算学期总评成绩——平时成绩占 40%期末考试成绩占 60%def calc(a, b): return a * 0.4 b * 0.6这个函数从功能上说一点问题没有算式完全正确。但从命名的角度这三个问题非常典型几乎每个孩子都踩过。4.1 孩子的原始版本参数名 a 和 b 就是“无名氏”第一个问题是函数名calc。它的确算是个动词也确实说明“这是一个计算”但从语义上讲等于什么都没说——什么 calc算什么没有主语、没有宾语。第二个问题也是这版代码最伤人的地方——参数名a和b。函数名至少还带个 “calc” 的尾巴a和b是什么既然这个功能是算学期总评参数一定是两个分数但到底哪个是平时分、哪个是期末分参数名完全没交代。等你真正用的时候可能还会下意识写反calc(80, 90)算出来的结果偏差不大bug 却悄悄埋下了。如果一个参数是“平时成绩”、另一个是“期末成绩”名字清楚地写着daily_score、exam_score就算把它们传反了调用那一行代码里也能一眼发现不对劲。4.2 一步步改名从参数名到函数名的全面升级带着孩子改名字的时候我习惯用“先想一句话描述函数是干什么的”来开头。让孩子自己说“这个函数就是算一个同学学期结束后的最终分数。”有了这句话函数名很容易起。既然核心动作是“计算”内容是“最终分数”那取名calculate_final_score就很自然。参数名方面平时成绩对应的是课堂作业、随堂测验这类日常表现叫daily_score合适期末考试直接叫exam_score就好。改完效果如下def calculate_final_score(daily_score, exam_score): return daily_score * 0.4 exam_score * 0.6改完之后有三点明显提升。第一读函数名就知道它在做什么第二读参数名就知道该传什么数据、顺序怎么排第三函数体里的公式也变成了“顺口溜”平时成绩乘零点四期末成绩乘零点六一目了然。4.3 改名之后函数虽然没有变化代码却“整容”了从机器的角度看输出版本和修改版执行结果完全一样。但从人的角度看这段代码完成了从“密码”到“说明书”的转变。这个例子最能说服孩子写代码不只是写给编译器听的是写给接下来要读这些代码的每一个人以及一个月后的自己听的。我还给孩子们总结了起名的“一句话口诀”先想一句话再说怎么算动作放前面数据讲明白。5. 陪孩子写函数时的四个常见误区与纠偏方法看别人的问题总归容易真到自己上手的时候孩子还是会在命名上反复踩坑。这很正常就像练字一样知道字帖是一回事手是另一回事。我把这几年陪孩子写代码时最高频的四个误区拿出来单独说每一条都配上纠偏方法老师家长可以直接拿来用。5.1 误区一用 a、b、c 当名字这是最普遍的原因不复杂省事。孩子觉得a只要按一个键daily_score要按十几个键太慢了。但省下的几秒钟会在后续读代码、调 bug、改功能的时候加倍还回来。纠偏办法很简单反问一句“这个 a 是干什么的”孩子答不出来就自然意识到要改名了。如果答出来了就顺着他答的那句话提取名字。孩子说“a 是期末考试的分数”于是名字就叫exam_score以后想怎么读都不会跑偏。5.2 误区二动词乱用什么都用 do、run 开头有些孩子知道函数该用动词开头但只会那几个万能动词于是满屏都是do_it、do_cal、run_program。这比 a、b、c 强一点但信息量依然很少。do和run太泛了它们几乎不描述任何具体动作只是给代码穿了一件“动词外套”。这时候可以和孩子做个小约定一个函数在干什么名字就把它“说人话”说出来。算分数就用calculate取名字就用get保存数据就用save判断能不能过关就用can_pass。每个动作都有自己最贴切的动词慢慢词汇量上去了代码读起来就像人说话一样自然。5.3 误区三缩写过度刚开始学函数的时候缩写往往是因为单词不会写或懒得写常见的有clc算avg平均init初始化。缩写本身不是不能用有些专业领域比如系统内部通用的命名缩写大家都能看得懂但对初学者来说缩写带来的问题远大于便利。一个孩子写的avg过两天再看会犹豫这是平均分还是一个变量的名字但如果是average歧义就小很多。如果还不放心可以再加一层信息写成average_score。我给孩子的原则很简单宁肯稍微长一点也不要因为缩写让信息失真。5.4 误区四驼峰命名从别的语言“传”过来很多孩子学编程不是只学 Python还看过 Java、JavaScript 或者小游戏引擎的教程。这些语言里驼峰命名calculateFinalScore是标准写法。到了 Python 里虽然不会报错但和社区风格不一致。我教孩子一个简单的区分方法“在 Python 里我们是小写单词、下划线串联的蛇形风格在别的语言里才是小写开头的驼峰风格。”让孩子知道“不同语言有不同腔调”不光是知识更是编程视野的开阔。真到了学 Java 那天孩子不会觉得两个世界势不两立而是能很快切换到对方习惯的命名方式上。5.5 一个可以立刻上手的课堂小游戏我在班里试过很多次、反馈特别好的一款小游戏叫“猜猜我是谁”。准备一叠小卡片每张上面写一个函数的功能描述例如“算两个数的最大公约数”“把一句话里的空格全部删掉”“判断一个年份是不是闰年”。孩子抽到卡片后先不起函数名先给这个函数画出“脸上的表情”——也就是写出它的输入参数列表和返回值再起一个名字。反过来也可以只给名字让大家写函数体。这个游戏妙就妙在它把“命名”从一项枯燥的规则变成了一个推理游戏。孩子为了起好名字不得不反复思考“这个函数输入什么、输出什么”而这一整套深度思考恰恰是编程里最值钱的核心能力。6. 命名之外让函数名帮你“想清楚问题”很多时候命名不只是一个动作更是一种检查方案。如果发现自己没法给一个函数起出准确、完整的名字通常是函数本身设计得太混乱了或者功能不够单一。这种情况比命名不规范要严重得多。6.1 想不出名字多半是设计有问题如果一个函数既在计算总分又在打印报告又改了全局数据这种“什么都干”的函数根本没办法用一个准确的名字描述它。这时候不要硬起名而是应该把函数拆开。这个信号藏在“起名难”的现象背后对孩子和大人一样适用。所以当孩子卡在起名这一步我给的提醒是不是你的词汇量不够是函数该拆了。6.2 函数名是代码的第一行注释有一种说法最好的注释是代码本身。函数名就是函数的“标题注释”也是函数最显眼的说明书。如果名字足够准确也许根本不需要在函数上写特别冗长的注释反过来如果一个函数光靠名字讲不清用途甚至需要几行注释去解释它到底是干嘛的通常就说明名字没起好。所以我建议孩子们写函数前先把“这个函数是干什么的”这句话写成一行的函数名然后再往兜里头填代码。这样等于先画好了路线图后面再动手思路会格外清晰逻辑出错率也明显下降。6.3 把命名习惯内化成肌肉记忆最后想分享一点个人的实操体会。命名这门功夫有点像学自行车——开始觉得难、麻烦练多了就变成肌肉记忆。我在带任何一个新班的时候前两次课后都会专门留出“命名巡检”的时间让孩子把自己的代码打开复习每一行、每个函数的命名要求用课堂上这条口碑积累起来的方法自己“审”一遍。一开始会改得很慢甚至有些孩子会觉得“这名字挺好的啊不用改了吧”。但坚持一两次课之后孩子交上来的函数名越来越像模像样读代码的速度也明显快了。真正重要的是让孩子体会到这个习惯不是束缚而是让之后的自己更轻松的一件武器。如果你也是在家陪孩子学 Python我的建议是别急着让孩子一本正经读 PEP 8 文档把这篇课里的例子拿出来和孩子一起给家里的小程序改名玩。改完一起读一读你会亲眼看到一个原本乱糟糟的函数是怎么靠一个名字变得清清爽爽、一眼就能看懂的。