常量和字面常量是什么?

10 投票
1 回答
18178 浏览
提问于 2025-04-18 09:08

我正在学习Python,但对常量和字面常量感到困惑。它们是什么?我们用它们来做什么?它们和普通变量有什么区别?

我还是个初学者,老实说,我对编程的世界几乎一无所知。比如,我不知道什么是表达式,反过来也不知道。

我在学习Python时,参考了《A byte of python》这本书,书中有一部分提到字面量和常量。我把那部分内容分享出来:

5.2. 字面常量

字面常量的例子有数字,比如5、1.23,或者字符串,比如'This is a string'或"It's a string!"。

它被称为字面量,因为你使用它的值是直接的。数字2总是代表它自己,没有其他意思——它是常量,因为它的值不能被改变。因此,这些都被称为字面常量。

书中提到的"它被称为字面量,因为你使用它的值是直接的",我不太明白这部分。书想表达什么是“直接使用它的值”?还有一个模糊的点是,数字2是常量,因为它的值不能被改变。这怎么可能呢?我们可以改变它,比如:

stack = 2
stack = 3

首先,我把数字2赋值给一个变量,然后我改变了这个变量的值(就是书中说的那个数字2,声称它是常量,所以不能改变),然后我把数字3赋值给它。所以,我很轻松地改变了数字2的值。我真的很困惑,如果你没明白我的意思,请告诉我,我可以给更多的例子。

1 个回答

12

在提问者编辑后的回答

字面常量就是一个实际的字面值;我知道“字面”这个词可能让你感到困惑,但举个例子可能会更清楚。如果你在REPL(交互式编程环境)中输入以下内容:

>>> 2
2
>>> 'hello'
'hello'

2hello 就是真正的字面常量,与你想的相反,你不能改变它们的值(当然,作为初学者,你最好不要知道如何改变)。当你有:

stack = 2
stack = 3

你首先是把字面常量(其实,别太在意它叫什么,反正就是数字2)赋值给 stack。所以,名字 stack 指向的值是 2。然后,当你说 stack = 3 时,你并不是在改变值 2你现在是让名字 stack 指向另一个值 3

说实话,“常量字面量”听起来很复杂;你只需要把像 2'John' 这样的值当作它们本身来看就行。至于实际的常量(在编程中,常量是指赋值后不能改变的变量),这个概念在Python中并不存在。常量的意思是,比如你说 stack = 2,但之后你不能再改变 stack 指向的内容,否则会出错。在Python中,这个概念是不存在的。

原始回答:

首先,我建议你阅读 关于None、True和False的故事(以及字面量、关键字和内置函数的解释),作者是Guido:

字面量是表达式中的一个元素,用来描述一个常量值。字面量的例子包括数字(例如42、3.14或1.6e-10)和字符串(例如“Hello, world”)。字面量是由解析器识别的,解析字面量的具体规则往往比较微妙。

至于“常量”,在Python中你不能把变量声明为“真正的常量”。Python中有一些 内置常量,比如 TrueFalseNone,但即使它们在Python 2.X中也不是“真正的常量”,因为它们可以被赋值指向其他值:

True = False
if True:
    print 'Hey' 
else:
    print 'WAAAT!'

希望这能帮到你。如果没有,请编辑你的问题,给出你所说的常量和字面常量的具体例子。

注意:TrueFalse 以及类似的词在Python 3.x中是关键字,所以如果你说 True = False,解释器会报错 SyntaxError: assignment to keyword

撰写回答