Python中规范的变量命名会让你的代码更优雅

2024-08-07 14:12:39 浏览数 (2)

人生苦短,我学Python!在Python中,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。变量名应该清晰地表达其用途或含义,避免使用无意义的名称。好的命名习惯能会让你的代码更优雅,读起来更有故事感。

1. 基本规则和意义

命名的初心

想象一下,如果代码是你的美食笔记,变量就是那些调料的名字。你想让未来的自己,或是别人,一眼就能知道“salt”是盐,“pepper”是胡椒,而不是什么“x123”。所以,清晰、直接是第一原则!

py

代码语言:javascript复制
# 好名字 vs. 糟糕的名字
age = 13  # 清晰易懂
x = 13    # 猜猜我是谁?

命名的方法

驼峰式(CamelCase)

当变量由多个单词组成,除了第一个单词,每个单词首字母大写,不使用下划线。

下划线式(snake_case)

每个单词间用下划线连接,全部小写。 Python社区偏爱下划线式,因为它更易读。

py

代码语言:javascript复制
# 驼峰式 vs. 下划线式
studentName = "Alice"  # 驼峰式
student_name = "Alice"  # 下划线式,Python的最爱

命名的长度

短而精,但别太短 变量名应该简洁,但要传达足够的信息。比如,num_students比n好太多,但也不必冗长到numberOfStudentsInClassToday。

py

代码语言:javascript复制
# 刚刚好
num_students = 55

# 太短或太长
n = 55
students_count_today_in_class = 55

避免数字开头

数字开头的变量名会让人困惑,而且Python不允许这样做。

py

代码语言:javascript复制
# 错误示范
2nd_score = 95  # 这样不行哦!

# 正确做法
second_score = 95  

禁止使用Python关键字

Python有一些保留词汇,如if, for, class等,它们有特殊含义,用作变量名会让你的程序大乱套。

py

代码语言:javascript复制
# 千万不要这样
for = 5  # 这会引起大麻烦!

# 正确的是使用其他名字
loop_count = 5

见名知意

好的变量名应该能让人快速理解其用途。比如,total_price而不是tp。

py

代码语言:javascript复制
# 易于理解
total_price = calculate_prices(items) 

# 谜语时间
tp = cp(items)  # 这里cp是什么鬼?

一致性为王

在项目中保持一致的变量命名风格,有助于提高代码的可读性和可维护性。可以选择使用下划线分隔单词或采用驼峰命名法,但应在整个项目中保持统一。 在整个项目中保持一致的命名风格,这是专业程序员的自我修养。

使用英文

虽然Python很国际化,但为了代码的通用性和阅读者的方便,建议使用英文命名。

py

代码语言:javascript复制
# 国际通行
age = 25

# 虽然有创意,但不推荐
年龄 = 25

复数形式要明确

表示多个对象时,使用复数形式。但如果是计数器,单数即可。

py

代码语言:javascript复制
# 清晰区分
students = ["Alice", "Bob"]
student_count = 2

避免缩写

除非是广为人知的缩写,否则尽量全拼。不然,你可能在为未来的你挖坑。

py

代码语言:javascript复制
# 避免不必要的缩写
url = "https://www.wanghao.me"

# 而不是
u = "https://www.wanghao.me"

描述状态的变量

当变量表示某种状态时,用动词 形容词,如is_valid。

py

代码语言:javascript复制
# 状态一目了然
is_valid = True

# 直接明了比含糊其辞好
v = True  # 这是什么意思?

利用注释

如果变量名真的很难表达清楚,那就加上注释来辅助说明吧!

py

代码语言:javascript复制
# 注释救场
user_data = {"name": "Alice", "age": 25}  # 用户信息字典

实践出真知

多写代码,多实践,你会慢慢形成自己的命名直觉。

团队约定

如果你在团队中工作,确保大家遵守相同的命名规则。团队协作,规则先行。

回顾与重构

定期回顾代码,看看是否有变量命名可以改进的地方。重构不只是代码的优化,也是命名艺术的提升。

2. 进阶技巧

类变量与实例变量的区分命名

在面向对象编程中,区分类变量(属于类本身)和实例变量(属于类的每个实例)很重要。通常,类变量会用全大写字母,中间用下划线连接,以示区别。

py

代码语言:javascript复制
class Student:
    SCHOOL_NAME = "Example High"  # 类变量
    def __init__(self, name):
      self.name = name  # 实例变量

使用枚举类型(Enum)

对于一组固定的值,使用枚举类型可以提高代码的可读性和安全性。

py

代码语言:javascript复制
from enum import Enum

class Grade(Enum):
    A = 90
    B = 80
    C = 70

current_grade = Grade.A  # 清晰表达当前成绩等级

避免过于具体的命名

虽然变量名应描述性,但也要避免过于具体到特定实现,这样未来修改实现时,不用改名。

py

代码语言:javascript复制
# 不好
current_student_list = []

# 更好
students = []

动态命名的陷阱

尽量少用动态生成变量名,这会使得代码难以追踪和理解。

py

代码语言:javascript复制
# 尽量避免
for i in range(5):
  var_name_i = f"data_{i}"  # 不直观,不易管理
    
# 使用列表或字典代替
data = [f"data_{i}" for i in range(5)]

遵循DRY原则(Don’t Repeat Yourself)

如果发现同样的信息在多个变量名中重复出现,考虑使用函数或类来封装这些逻辑。

py

代码语言:javascript复制
# 反例
age_student1 = 25
age_student2 = 26

# 正例
def create_student_profile(age):
    return {"age": age}
student1 = create_student_profile(25)
student2 = create_student_profile(26)

3. 实战应用

假设我们正在开发一个简单的天气应用,来看看如何运用这些命名技巧。

py

代码语言:javascript复制
class Weather:
    def __init__(self, city, temperature, condition):
      self.city = city  # 清晰表达城市名
      self.temperature_celsius = temperature  # 温度单位明确
      self.weather_condition = condition  # 条件描述

    def describe(self):
      return f"In {self.city}, it's {self.weather_condition} with a temperature of {self.temperature_celsius}°C."

weather_london = Weather("London", 15, "Partly Cloudy")
print(weather_london.describe())

这段代码展示了如何通过有意义的变量名来增强代码的可读性和结构清晰度。每个变量名都直接反映了其背后的意图,使代码自解释性更强。

命名不仅是技术,更是一种艺术。

那年 • 今日

  • 2018年 暑假之泰国7日游

0 人点赞