003:别瞎定义常量了!Python根本没有常量,资深开发都这样写

内容分享2周前发布
1 1 0

当你看到 MAX_CONNECTIONS = 100 和 current_user = “张三” 时,是否思考过它们本质的区别?在Python中,常量与变量的误用堪称初级程序员的“头号杀手”,今天我们就来彻底讲清这个看似简单却暗藏玄机的知识点!

003:别瞎定义常量了!Python根本没有常量,资深开发都这样写

一、变量:善变的“记忆便签”

变量就像你桌上的临时便签——今天写“待办会议”,明天就能改成“已完成”。在Python中,变量有三大特点:

  1. 即用即定义
    count = 0 就完成了一次赋值,无需提前声明类型
  2. 指向灵活
    同一个变量可以随时指向不同类型的数据:
```python
value = 10 # 先是整数
value = "文本" # 瞬间变成字符串
```

引用传递
变量存储的是对象的“地址”而非对象本身,这导致了一个经典陷阱:

```python
list1 = [1, 2]
list2 = list1 # 两个变量指向同一个列表!
list2.append(3) # list1也变成了[1, 2, 3]
```

心理学原理:人类大脑对可变信息会自然降低重点关注程度,这就是为什么随意命名的变量(如x、temp)会让代码在几天后变得难以理解!

003:别瞎定义常量了!Python根本没有常量,资深开发都这样写

二、常量:不该被忽视的“交通标志”

与变量相反,常量应该是程序中的“固定路标”。但Python实则没有真正的常量!我们靠的是全大写命名约定

PI = 3.1415926      # 数学常数
DATABASE_URL = "postgresql://..."  # 数据库连接
MAX_RETRY_TIMES = 3 # 最大重试次数

关键要点

  • 全大写命名是一种社会契约,告知团队:“修改我可能引发灾难!”
  • 常量一般定义在模块顶部,一眼就能看到“配置地图”
  • 实际开发中,重大常量提议放在 config.py 中聚焦管理

003:别瞎定义常量了!Python根本没有常量,资深开发都这样写

三、90%人踩过的实际大坑

场景1:以为是常量,结果被修改

# settings.py
TIMEOUT = 30

# 某个深层函数中
def connect():
    global TIMEOUT
    TIMEOUT = 60  # 灾难!全局配置被意外修改

解决方案:使用 @property 或配置类封装,或者直接使用 configparser 读取配置文件。

003:别瞎定义常量了!Python根本没有常量,资深开发都这样写

场景2:可变对象作为默认参数

def add_user(user, user_list=[]):  # 坑!默认列表在函数定义时创建
    user_list.append(user)
    return user_list

第一次调用 add_user(“张三”) 返回 [“张三”],第二次调用却返回 [“张三”, “李四”]!

正确做法

def add_user(user, user_list=None):
    if user_list is None:
        user_list = []
    user_list.append(user)
    return user_list

003:别瞎定义常量了!Python根本没有常量,资深开发都这样写

四、工程实践:让你的代码更专业

  1. 变量命名要有“信息量”
    elapsed_time_in_days 远比 days 更清晰
  2. 常量分组定义
  3. # 数据库配置
    DB_HOST = 'localhost'
    DB_PORT = 5432

    # 业务限制
    MAX_FILE_SIZE = 1024 * 1024 # 1MB

  4. 使用枚举取代魔法数字
```python
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
```

003:别瞎定义常量了!Python根本没有常量,资深开发都这样写

练习代码

源码已备,自取。 都是项目里即插即用的干货,希望能提升你的效率。

luck_number=8  #创建一个整型变量luck_num,并为其赋值为8
my_name='沪上程序员流浪记'      # 字符串类型的变量
print('luck_number的数据类型是:',type(luck_number))   #type打印定义的变量是什么数据类型
print('my_name的数据类型是:',type(my_name))

'''
以上代码运行结果
luck_number的数据类型是: <class 'int'>
my_name的数据类型是: <class 'str'>

'''

# Python动态修改变量的数据类型,通过赋不同类型的值就可以直接修改
luck_number="上海欢迎你"
print('luck_number的数据类型是:',type(luck_number))

'''
以上代码运行结果
luck_number的数据类型是: <class 'str'>
'''

#在Python中允许多个变量指向同一个值
no=number=1024  # no与number都指向了1024这个整数值
print(no,number)
print(id(no))    #id()查看对象的内存地址
print(id(number))

'''
以上代码运行结果
1024 1024
1894480787120
1894480787120
'''

pi=3.1415926 # 定义了一个变量
PI=3.1415926 # 定义了一个常量

结语

理解变量与常量的本质,不仅是掌握语法,更是培养编程思维的关键。变量赋予代码灵活性,常量赋予代码稳定性,二者的合理使用直接决定了代码的质量层级。


思考题:你的项目中是否有应该设为常量却被误用为变量的例子?欢迎在评论区分享你的“踩坑经历”!
点赞转发,让更多开发者写出更健壮的代码!

© 版权声明

相关文章

1 条评论

您必须登录才能参与评论!
立即登录