【问题标题】:What are literals in python? [duplicate]python中的文字是什么? [复制]
【发布时间】:2016-03-15 07:59:06
【问题描述】:

python 中的字面量到底是什么?我在谷歌和 python 文档中搜索了答案,但谷歌只是引用了字符串文字,而 python 文档没有明确说明文字是什么。我遇到了这个页面http://www.dalkescientific.com/writings/NBN/python_intro/literals.html,它提供了以下答案:

对象也称为数据结构。 Python 带有一些内置对象。有些经常被使用,以至于 Python 有一种快速的方法来制作这些对象,称为文字。字面量包括字符串、Unicode 字符串、整数、浮点数、长整数、列表、元组和字典类型。

这是正确的吗?我可以假设文字只是 python 内置对象的另一个术语吗?是否还有其他文字未包含在描述中?我的印象是存在二进制字面量之类的东西,而布尔值也被视为字面量。

【问题讨论】:

  • 区别在于构造函数 - 参见here for a dict example 继承。
  • 文字是在创建某些数据类型的语言语法规范中定义的东西。因此,您无法重命名或更改它。考虑[]list() 之间的区别,前者总是创建一个列表,而后者必须查找list 是什么,默认情况下将构造一个列表,但如果list 被重新分配到其他地方,则不一定这样做。
  • 这个问题对我来说比“已经回答”的问题要好得多,更重要的是,与那个问题不同。因为寻找这个问题的人不一定知道 - 实际上很可能不知道 - Literal 和 Literal 常量基本相同。

标签: python


【解决方案1】:

文字是解析器识别为直接写入对象的语法的东西。 Python 2 中的一些示例:

  • 0123int 文字)
    • -1-2 等不是文字本身,而是涉及一元 - 运算符的表达式。
  • 5j, 3.14j(非负纯虚数 complex 文字)
    • 其他复杂值,如 2+3j2-3j-5j,是表达式 涉及各种运营商。
  • 3.5, -2.7float 文字)
  • "", "hello"str 文字)
  • u"", u"hello"unicode 文字)
  • None(我认为这被认为是文字,而不是关键字或简单名称。)

其他类似于文字的表达式称为显示用于创建各种容器。它们不是真正的文字,因为它们可以包含非文字表达式(例如,[x, y])。

  • [][1,2]list 显示)
  • ()(1,)(1,2)tuple 显示)
  • {}{'a': 2}dict 显示)
  • {1,2,3} (set 显示在 Python 2.7 中引入)

空集没有文字或显示,因为明显的符号{} 是 已经是dict 显示。 Python 2 没有真正的布尔文字; TrueFalse 只是布尔对象的内置名称。元组在技术上是由逗号创建的,只有当您需要消除表达式的歧义时才需要括号;空元组 () 除外。

有关 Python 3 中的一些差异,请参阅 phihag 的回答。

【讨论】:

  • 谢谢,这解释的很好!
  • 这和 phihag 已经澄清了一次文字是什么......经过这么多搜索......谢谢!
  • 我不相信-3 是 Python 中的整数文字。它是一个表达式:应用于整数文字3 的一元否定运算符。浮点文字也是如此。事实上,您可以证明这一点:-2**2-(2**2),即 -4,而不是 (-2)**2,后者是 4
  • 同样,Python 没有复杂的文字。它只有非负的虚构文字。这些可以与浮点文字组合以形成复数。所以-3-5j 实际上是(-(3))-(5j)。此表达式中有两个文字:35j
  • 我清理了这个答案,并添加了真正的文字和 显示(用于创建列表等)之间的区别。
【解决方案2】:

文字is a language-independent programming term。字面量是一种简洁易懂的写值方式。例如,您可以使用int() 构造零值,但0 更方便。

在 Python 中,可以使用以下文字:

  • 字符串文字,如@9​​87654326@、u'Köln'(第一个是Python 2.x中的字节字符串文字)
  • 字节字符串文字,例如b'\x89PNG'
  • 整数文字,例如421_2340x2a0b101010
  • 浮点字面量,例如1.2e-19
  • Imaginary 文字,例如 2.3j
  • 布尔文字:TrueFalse(不是旧 (2.x) Python 版本中的文字)
  • None
  • 元组:(1, 2, 3)
  • 列表:[1, 2, 3]
  • 字典:{1: 'one', 2: 'two'}
  • 套数:{1, 2, 3}

【讨论】:

  • 谢谢!第一个例子使它不仅仅是与变量不同的东西...... +++++
  • 我不相信-12 是 Python 中的整数文字。它是一个表达式:应用于整数文字12 的一元否定运算符。浮点文字也是如此。事实上,您可以证明这一点:-2**2-(2**2),即 -4,而不是 (-2)**2,后者是 4
  • 同样,Python 没有复杂的文字。它只有非负的虚构文字。这些可以与浮点文字组合以形成复数。所以1+2.3j 实际上是(1)+(2.3j)。此表达式中有两个文字:12.3j
  • @TomKarzes 好点。固定。
  • 您应该将“复杂文字”更改为“虚构文字”。虚构文字确实具有复杂类型,但它们的实部始终为零。任意复数是通过将一个浮点数(或整数)添加到一个虚构的文字来形成的。这直接来自 Python 文档:Imaginary literals
【解决方案3】:

在这种情况下,我认为这只是意味着 Python 解析器接受这些实体的内置语法。例如,"abc"str123int1.2float,等等。

【讨论】:

    【解决方案4】:

    我可以假设文字只是 python 内置对象的另一个术语吗?

    关闭。它们是一种编写(某些)Python 内置对象的方式。例如,如果您需要一个特定的数字,并且您不是从文件或用户那里读取它,也不是从数据库中获取它,也不是计算它或从另一个模块导入它,或者...您可以使用数字文字把它放在你的代码中。

    number = 42
    

    number 这里是整数 42,使用文字指定。

    Python 的 TrueFalse 值(和 None)并不是真正的文字,而是这些值的预定义名称。但概念是相似的:Python 为您提供了一种将这些值直接写入代码的方法。

    几乎所有编程语言的大多数常用类型都有文字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 2017-03-14
      • 2017-09-04
      • 2011-05-30
      • 2019-03-30
      • 2019-02-10
      相关资源
      最近更新 更多