Python变量命名指南:7条实用建议与代码示例

拾柒
拾柒
发布时间:2026-10-13 | 4人浏览过
原创

本文基于Clean Code理念,结合Python3.7语法,总结7条变量命名建议。涵盖使用有意义名称、统一同类变量词汇、确保可搜索性、自我描述、避免猜测、去除冗余上下文及合理使用默认参数。通过正误代码对比,帮助开发者提升代码质量与可维护性。

Python变量命名指南:7条实用建议与代码示例

前言

在Quora开发者社区的投票中,程序员面临的最大挑战莫过于命名问题(包括变量、类、函数等)。仅“命名”这一项的票数,就几乎相当于其他八项难题票数的总和。如何为变量赋予有意义的名称,是每位开发者必须跨越的障碍。本文参考《Clean Code》一书,整理出7条命名建议,旨在为命名过程提供实用参考。

以下示例均基于Python3.7语法环境。

使用有意义且易读的变量名

1、使用有意义且易读的变量名

差


ymdstr = datetime.date.today().strftime("%y-%m-%d")

例如使用 ymd,读者很难直接猜测其含义。

好


current_date: str = datetime.date.today().strftime("%y-%m-%d")

使用 current_date,意图一目了然。

同类型变量应使用相同的词汇

2、同类型变量应使用相同的词汇

差


get_user_info()
get_client_data()
get_customer_record()

好


get_user_info()
get_user_data()
get_user_record()

极好


class User:
  info : str

  @property
  def data(self) -> dict:
    # ...

  def get_record(self) -> Union[Record, None]:
    # ...

使用可搜索的名字

3、使用可搜索的名字

日常开发中,阅读代码的时间远多于编写时间。因此,代码不仅要可读,还要便于搜索。一个没有明确名称的变量不仅无法传达程序逻辑,还会增加读者的理解成本。请务必确保变量名具备可搜索性。

差


time.sleep(86400);

例如直接使用数字 86400,除非是专家,否则很难直观理解其代表的时间概念。

好


# 在全局命名空间声明变量,一天有多少秒
SECONDS_IN_A_DAY = 60 * 60 * 24

time.sleep(SECONDS_IN_A_DAY)

使用常量或具名变量后,代码清晰度显著提升。

使用可自我描述的变量

4、使用可自我描述的变量

差


address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$'
matches = re.match(city_zip_code_regex, address)

save_city_zip_code(matches[1], matches[2])

例如 matches[1],这种索引方式无法直观解释该值的用途。

一般


address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$'
matches = re.match(city_zip_code_regex, address)

city, zip_code = matches.groups()
save_city_zip_code(city, zip_code)

使用 matches.groups() 可以自动解包为两个变量,分别命名为 city 和 zip_code,语义更清晰。

好


address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(?P<city>.+?)\s*(?P<zip_code>\d{5})?$'
matches = re.match(city_zip_code_regex, address)

save_city_zip_code(matches['city'], matches['zip_code'])

避免强迫读者猜测,明了胜于晦涩

5、不要强迫读者猜测变量意义,明了胜于晦涩

差


seq = ('Austin', 'New York', 'San Francisco')

for item in seq:
  do_stuff()
  do_some_other_stuff()
  # ...
  # Wait, what's `item` for again?
  dispatch(item)

例如使用 seq,读者无法确定这代表序列、集合还是其他含义,必须继续阅读后续代码才能确认。

好


locations = ('Austin', 'New York', 'San Francisco')

for location in locations:
  do_stuff()
  do_some_other_stuff()
  # ...
  dispatch(location)

使用 locations,可以直观看出这是一个由多个地区组成的元组。

不要添加无谓的上下文

6、不要添加无谓的上下文

如果类名已经提供了足够的上下文信息,就不应在变量名中重复描述。

差


class Car:
  car_make: str
  car_model: str
  car_color: str

例如在 Car 类中定义 car_make,显得画蛇添足。遵循“如无必要,勿增实体”的原则。

好


class Car:
  make: str
  model: str
  color: str

使用默认参数优化代码结构

7、使用默认参数代替短路运算和条件运算

差


def create_micro_brewery(name):
  name = "Hipster Brew Co." if name is None else name
  slug = hashlib.sha1(name.encode()).hexdigest()
  # etc.

好


def create_micro_brewery(name: str = "Hipster Brew Co."):
  slug = hashlib.sha1(name.encode()).hexdigest()
  # etc.

既然函数内部需要对未传参的情况进行处理,不如在定义函数时直接指定默认参数,使代码更简洁。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表