【问题标题】:What really is a keyword in Python?Python中真正的关键字是什么?
【发布时间】:2019-07-05 00:25:23
【问题描述】:

我们可以得到一个Python关键字列表如下:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', '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']

很酷,但我没想到会在那里看到FalseNoneTrue。它们是内置对象。

为什么是 TrueFalseNone 关键字,但 int 不是?是什么真正使某些东西成为 Python 中的关键字?

编辑:我说的是 Python 3

【问题讨论】:

  • 你为什么会期待int 在里面?如果 python 有明确的类型,当然,也许会有一个 int 关键字,但在 python 中 int() 是一个函数。
  • Python 版本在这里很重要。
  • 这里可能存在一些混淆,因为人们可能会错误地将关键字视为“不能在标识符通常使用的表达式中使用的词”。这准确地描述了 99% 的关键字——例如,2 + def 是不合法的语法。但是 False、None 和 True 可以用在表达式中,所以它们似乎违反了规则。但事实是,没有这样的规则。如果关键字代表一个对象,那么您可以像使用对象一样使用它。

标签: python object keyword


【解决方案1】:

关键字是保留名称,因此不能分配给它们。

>>> True = 0
  File "<stdin>", line 1
SyntaxError: can't assign to keyword

int 是一个类型;完全可以重新分配它:

>>> int = str
>>>

(不过我真的不推荐这个。)

【讨论】:

  • 值得注意的是,在 Python 2 中 True 不是关键字,第一个 sn-p 可以正常工作。
【解决方案2】:

Python 不像 Javascript。在 Javascript 中,您可以执行 undefined = "defined" 之类的操作(更新:已修复)。

关键字取决于您使用的python。例如:async3.7 中的一个新关键字。

事情并不总是这样,在 Python 2 中 True = False 是有效的......

>>> True = False
>>> True
False
>>> True is False
True

所以“它们是内置对象。”,是的,但是新版本的 python 可以防止你变得愚蠢。这是唯一的原因...

新的关键字(从 Python 2.7 开始)是:

False
None
True
async
await
nonlocal

当然execprint 不再是关键字了。

【讨论】:

    【解决方案3】:

    在 python 2.6 中你可以做类似 True = False 的事情(真的很混乱)

    link可能对你有帮助

    【讨论】:

      【解决方案4】:

      实际上,关键字是 Python 中预定义的保留名称,对于语言的解析器具有特殊含义。有时他们宣称我们将要定义:

      1. 一种类型的实例(就像 defclass 关键字所做的那样)
      2. 条件语句(如ifwhile ...)
      3. ...
      4. 有时它们是实际对象,例如 TrueFalseNone

      因为我没有看到提到任何正文,所以我们有两种类型的关键字:(示例来自 python 3.10

      1- 硬关键字:(keyword.kwlist)

      ['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']
      

      2- 软关键字:(keyword.softkwlist)

      ['_', 'case', 'match']
      

      您不能使用硬关键字作为变量名或给它们赋值。它们在所有地方都是保留名称。但是您可以有一个名为match 的变量,也可以将它们作为普通变量放在表达式中。 match 只有在匹配案例块的第一行才有特殊含义。

      来自PEP 634

      请记住,matchcase 是软关键字,即它们不是 其他语法上下文中的保留字(包括开头 如果预期的地方没有冒号,则为一行)。

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 2011-02-08
        • 2022-12-05
        • 2011-12-17
        • 2015-04-09
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 2014-11-29
        相关资源
        最近更新 更多