看一个人的代码,我第一眼就瞅他怎么用词。别笑,这事儿比你想象的要严肃得多。算法?框架?设计模式?那些都是硬功夫,但python怎么用词,或者说,命名,这门手艺,才是代码的灵魂,是你作为一个开发者,品味和教养的直接体现。

代码这东西,说白了,就是一篇写给未来自己和同事看的小说。你总不希望几个月后,自己回头看,跟看天书似的,挠破头皮都想不起来当初 data1data2 到底是个啥玩意儿吧?那不是写代码,那是给自己挖坑,是给团队制造精神内耗

所以,聊聊这事儿。不扯那些枯燥的 PEP 8 规范条文,咱们聊点有血有肉的,聊点“人话”。

变量:故事里的名词,得有鼻子有眼

变量,就是你故事里的一个个角色、一个个物件。你管他叫“那个人”,还是叫“穿着红色风衣、跛着脚的侦探老王”?差别大了去了。

别再用 a, b, c, x, y, z 了,求你了。除非你在解一道纯数学题,否则,这就是懒惰,是智力上的投降。看到这种代码,我血压就上来了。

一个好的变量名,应该是自解释的。你一看它,就大概知道它的类型、它的用途、它的存在意义。

比如,你要存用户的名字:
别这样u 或者 name (太泛了,啥名字?)
可以这样user_name
更好的是customer_name 或者 admin_username,如果上下文需要更精确。

再比如,处理时间:
灾难现场t 或者 time
有点意思了start_time, end_time
这才叫专业start_time_in_ms (毫秒), retry_interval_seconds (秒)

看到了吗?单位!带上单位!这能避免无数潜在的 bug。timeout = 5 是 5 秒还是 5 分钟?鬼知道。timeout_in_seconds = 5,清清楚楚,明明白白。

别怕名字长。真的,别怕。现代的 IDE 都有自动补全,你多打几个字母,换来的是未来几个小时甚至几天的心智清净,这笔买卖,血赚。max_retry_attemptsmra 好一万倍。前者是说明书,后者是摩斯电码。

我管这种命名方式叫“场景还原命名法”。一个变量名,就能让你脑子里浮现出它所在的业务场景。这才是代码可读性的精髓。

函数与方法:故事里的动词,讲究一个“干啥”

如果变量是名词,那函数就是动词。它代表一个动作,一个过程,一个行为。所以,函数名,天生就该是动词或者动宾短语

你希望你的函数名是在陈述一个事实,还是在发布一个命令?

  • user_data():嗯?这是数据本身,还是获取数据的动作?不清楚。
  • get_user_data():漂亮!动词开头,get_,我一看就知道,哦,这是要去取点什么东西回来。

一些常见的“动词前缀”,简直就是代码里的交通信号灯:

  • get_:获取数据,通常有返回值,且不改变系统状态。get_active_users()
  • set_:设置值,修改状态。set_user_password()
  • is_ / has_:返回布尔值,用于判断。is_logged_in(), has_permissions()
  • create_ / build_:创建一个新的东西。create_new_order()
  • calculate_ / compute_:进行计算,返回结果。calculate_tax()

一个函数的名字,就是你和调用者之间的一个契约calculate_tax(price, region),这个名字就承诺了,它会根据价格和地区计算税费,并且仅仅做这件事。如果它背地里还偷偷发了个邮件,那就是欺骗,是背叛!这种函数,就是代码里的“渣男”,迟早要出事。

所以,一个函数只做一件事,并且用它的名字把这件事说清楚。这是最重要的一条军规。

类(Class):故事的主角,大写开场

类,就是你代码世界里的“物种定义”。它是蓝图,是模板。比如“人”这个类,定义了人有姓名、年龄这些属性,有吃饭、睡觉这些行为。所以,类的命名,天生就该是个名词,而且,按照约定俗成,用PascalCase(或者叫 CapWords)风格,也就是每个单词首字母大写。

  • User
  • HttpRequest
  • DatabaseConnection
  • OrderProcessor

看到大写字母开头的,你的大脑就会立刻把它识别为一个“类型”,一个“概念”,一个“主角”。这是一种心理暗示,非常有效。

别把类命名成 ManageUsers 这种动词短语,那是函数干的活儿。类应该是 UserManager,这个“管理者”本身。

常量:宇宙的法则,不容改变

常量,就是你程序里写死的、不会变的“真理”。比如圆周率,比如一个配置项的最大连接数。它们是代码世界里的地标,是基石。

为了以示尊重,我们用ALL_CAPS_WITH_UNDERSCORES(全大写,下划线连接)来命名。

  • PI = 3.14159
  • MAX_CONNECTIONS = 10
  • DEFAULT_TIMEOUT_SECONDS = 30

当你看到一个全大写的变量,你心里就得有个警钟:别动它!这是规矩!

那些该扔进垃圾桶的“坏词”

聊完了好的,再来批判一下那些让人头疼的“坏词”,也就是命名的反模式

  1. 意义不明的单字母:除了 i, j, k 在简单的 for 循环里,eexcept 块里,其他的,有一个算一个,都该被批斗。
  2. 含糊不清的缩写calc_res 到底是 “calculate result” 还是 “calculation resource”?别让别人猜。
  3. 数据类型当名字user_list, name_string, age_int。拜托,这是 Python,不是上古 C 语言。你的 IDE 悬停一下什么类型都知道了,这种命名除了啰嗦,毫无意义。我们关心的是它的业务含义,不是它的计算机类型。叫 active_users 不比 user_list 香吗?
  4. 数字序列user1, user2, user3。看到这个,我就知道你八成是需要一个列表或者字典了。这是结构设计出了问题,想用命名来找补,结果越补越烂。

结语:命名,是一场关于“共情”的修行

说到底,python怎么用词,或者说写代码怎么命名,它根本就不是一个纯粹的技术问题。它是一个沟通问题,是一个共情问题

你得能共情未来的你,那个已经忘了所有细节、焦头烂额的你。
你得能共情你的同事,那个需要接手你代码、可能在深夜里默默问候你家人的同事。

好的命名,就像在崎岖的山路上铺设的台阶,清晰、稳固,让后来者可以轻松、愉快地前行。而坏的命名,就像在代码里挖的一个个小土坑,一不留神就崴了脚,摔个大跟头。

记住那句被说烂了但永远正确的话:

代码是写给人读的,只是顺便让机器执行。

你的每一个变量名,每一个函数名,都在构建一个世界。希望你的那个世界,是一个清晰、优雅、充满善意的世界。这,比你多会一种花里胡哨的算法,重要得多。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。