⌨️ 第三章 数值和数据的处理方法
📄 一句话概括

保留字是语言自己占了的名字(你不能用)、字面量是直接写出的值、魔法数字是来历不明的裸数字——这一课的中心思想一句话:代码首先是写给人看的,顺便让机器执行。

📝 本节和前面几节的关系

3-4 起变量要起名字,这一篇讲【命名赛道上谁已经有主】:语言占了的不能碰;以及【什么样的数字该起名字】。回收数据库课 5-7 的配型命名精神——名字都是给人读的。

一、保留字(关键字):语言自带的名字

每种语言都有一批已占用的词——它们构成语言的语法骨架,不能再拿去当变量名、函数名。Python 3.13 有 35 个硬关键字(if、for、while、def、class、import……)外加 4 个软关键字(match、case、type、_——只在特定语法位置才被占用)。

import keyword
print(len(keyword.kwlist))    # 35
print(keyword.softkwlist)     # ['_', 'case', 'match', 'type']
class = 10    # SyntaxError!class 是保留字

命名冲突的教训:list、str、type、id 在 Python 里不是保留字,但它们是内置类型名——拿它们当变量名(list = [1,2])当时能跑,回头再用 list() 就炸。语法不禁、也最好别碰。

二、字面量(文字):直接写在代码里的值

42          # 整数字面量
3.14        # 浮点字面量
"你好"      # 字符串字面量
True        # 布尔字面量
[1, 2, 3]   # 列表字面量

字面量是【不用加工、所见即所得】的值。它本身没问题——问题是该命名的时候不命名。

三、魔法数字:来历不明的裸数字

if score >= 60:          # 60 是什么?
    bonus = salary * 0.03   # 0.03 又是什么?

60 和 0.03 是两颗【魔法数字】:读代码的人不知道来历,改需求的人要满世界找。解法就是 3-4 的常量:

PASS_LINE = 60           # 及格线
BONUS_RATE = 0.03        # 绩效奖金比例

if score >= PASS_LINE:
    bonus = salary * BONUS_RATE

一行命名,来历自明、修改一处生效。魔法数字的反面不是【不许写数字】,是【有含义的数字要有名字】——2 * 3.14159 这种一眼可见的算式不必强命名。

四、动手 Demo:查一遍你语言的全部保留字

import keyword
print(keyword.kwlist)

看到什么算成功(Python 3.13):

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try',
 'while', 'with', 'yield']

读结果:35 个词就是 Python 语法的全部【承重墙】——试着拿 def = 1 会当场报错;而 type = 1 不报错却埋了雷(软关键字+内置名双重身份)。

五、30 秒实验

跑 print = 5 然后再跑 print("hi")——第二句报 TypeError: int object is not callable。你把内置函数 print 改造成了整数 5,它的本职功能没了。30 秒记住【内置名别占】。

六、常见误区

  1. 【保留字就是所有不能用的名字】——错。保留字只是语法禁用的那批;内置类型/函数名(list、print、type)语法上可用但占了会闯祸,还有变量名撞变量名的遮挡问题。
  2. 【魔法数字指所有数字】——错。坐标 x + 1、循环 range(10) 这种语义自明的数字裸写没问题;魔法数字特指【含义藏在业务里、只有作者当时知道】的数字。
  3. 【加注释就够了,不用命名】——不足。注释会跟代码脱节(改了代码忘改注释),名字跟着定义走,改一处全局生效。
自测三问(点开对答案) 1. **保留字和内置名(如 list)的区别?** 答:保留字被语法占用,当变量名直接报错;内置名语法可用,但覆盖后原功能失效——前者是硬禁、后者是软忌。 2. **魔法数字的两大危害?** 答:读代码的人不知道来历(可读性);改需求要全局搜数字、漏改就是 bug(可维护性)——命名常量一次解决。 3. **Python 3.13 的软关键字是什么意思?** 答:match、case、type、_ 只在特定语法结构(如 match 语句)里被当关键字,平时还能当普通名字用——所以叫软。

相关笔记