【问题标题】:What are Constants and Literal constants?什么是常量和字面常量?
【发布时间】:2014-07-30 03:24:38
【问题描述】:

我正在学习 Python,我只是对常量和文字常量感到困惑。它们是什么?我们使用它们的目的是什么?它们与普通变量有什么区别?

非常感谢。

编辑:

我是一个真正的初学者。作为初学者,我可以说我对编程世界一无所知。就像我不知道表达式是什么一样,反之亦然。

我一直在使用“A byte of python”一书学习 python 语言,在书中的某个地方我遇到了一个讨论文字和常量的部分。我在那里分享了这个部分:

5.2。字面常量

文字常量的一个例子是像 5 、 1.23 或 a 像“这是一个字符串”或“这是一个字符串!”这样的字符串。 .

它被称为字面量,因为它是字面量——你使用它的值 字面上地。数字 2 总是代表它自己,没有别的——它 是一个常数,因为它的值不能改变。因此,所有这些 被称为文字常量。

它说,“它被称为字面量,因为它是字面值 - 你按字面意思使用它的值”,我只是不明白这部分。这本书试图说我们按字面意思使用值是什么?另一个模糊点是数字 2 是一个常数,因为它的值不能改变。这怎么可能?我们可以改变它,比如:

stack = 2
stack = 3

首先,我将数字 2 分配给堆栈,然后我更改了堆栈的值(这本书声称它是一个常数,因此不能更改的数字 2)并分配给它的数字 3。所以我很容易改变了数字 2 的值。我真的很困惑,如果你不明白我的意思,请告诉我,这样我可以举更多的例子。谢谢你们抽出时间。

【问题讨论】:

  • 你能举例说明你的意思吗?
  • Python 没有常量 - 名称为 UPPERCASE 的变量按照约定是常量,但在任何地方都没有强制执行。
  • @arshajii 我已经编辑了帖子并给出了示例。
  • 您没有更改 2 的值。您将绑定名称 Stack 的内容从值 2 更改为值 3。

标签: python constants literals


【解决方案1】:

OP 编辑​​后回答

文字常量是实际的文字值;我知道字面量这个词会让你感到困惑,但举个例子可能会更清楚。如果您在 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 中,这个概念是不存在的。

原答案:

对于初学者,我建议您阅读 Guido 的 The story of None, True and False (and an explanation of literals, keywords and builtins thrown in)

另一方面,文字是描述常量值的表达式的元素。文字的示例是数字(例如 42、3.14 或 1.6e-10)和字符串(例如“Hello, world”)。文字可以被解析器识别,而文字如何解析的确切规则通常非常微妙。

对于“常量”,您不能在 Python 中将变量声明为“真正的常量”。在 Python 中有一个 Built-in Constants,例如 TrueFalseNone,但即使它们在 Python 2.X 中也不是“真正的常量”,因为它们可以分配为指向另一个值:

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

我希望这会有所帮助。如果不是,请编辑您的问题并举例说明常量和字面常量的确切含义。

注意:TrueFalse 等是 Python 3.x 中的关键字,所以如果你说 True = False,解释器会引发 SyntaxError: assignment to keyword

【讨论】:

  • IIRC TrueFalse 是 Python 3 中的“真实”常量……
  • 修复了这个问题。谢谢。它们是关键字,现在分配给它们会引发SyntaxError: assignment to keyword
  • @s16h 我真的无法从你的回答中得到丝毫的想法。我已经编辑了我的帖子。
  • 请让我知道新添加的答案是否更好。如果没有,我也许可以使它更简单;也许再退一步。
  • @s16h 你说: 2 和 hello 是实际的文字常量,与你的想法相反,你不能改变它们的值(好吧,作为初学者,你可以,最好不知道)。究竟如何改变2Hello 的值?
猜你喜欢
  • 2016-02-13
  • 2012-10-22
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2015-09-17
  • 2016-08-24
  • 1970-01-01
相关资源
最近更新 更多