【问题标题】:Is it possible to redefine keywords in Python?是否可以在 Python 中重新定义关键字?
【发布时间】:2019-01-30 05:24:22
【问题描述】:

我遇到了一个问题,我必须对我的 API 设置返回的所有内容进行 jsonify。当我正在编写一个装饰器并将其应用于每个方法时,我想到了一个想法:

“我不能只覆盖 return 关键字,让它每次都为我执行这个操作吗?”

我进行了一些搜索,但找不到有关该主题的任何内容。但是,既然“万物皆对象”,或许有可能?

显然覆盖return 是个坏主意,但在更一般的意义上,我的问题是:

你能改变 Python 中保留字和关键字的行为吗?

【问题讨论】:

  • 不......除非你分叉 python 项目并重写 return 关键字,但只有当你想在任何地方返回 json 时才会工作......lol
  • 是类吗?您可以使用single decorator. 装饰类中的所有方法
  • @Grant McCloskey 我并不是想在这里解决一个特定的问题,而是要更好地理解整个语言。我写下了我的思考过程,这样人们就可以理解我在问什么。
  • 是的,我只是想考虑问题来源的其他替代方案,因为我遇到了类似问题。
  • 我有点惊讶于找不到此问题的重复项,因此我对@RodrigoAlencar 的评论进行了一些扩展,以使其成为“正确”的答案。

标签: python python-3.x keyword reserved-words redefinition


【解决方案1】:

,您不能在 Python 中重新定义保留字。他们的意思是……drumroll……reserved,所以根据定义,它不能被改变。

我能在官方文档中找到最接近明确的declaration 这个事实的是语言参考的词法分析章节(强调我的):

2.3.1。关键字

以下标识符用作保留字,或语言的关键字,不能用作普通标识符。它们的拼写必须与此处所写的完全一致:

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

由于关键字不能用作普通标识符,因此不能在def语句中分配、用作函数名等。

重要的是要理解,实际上禁止更改其含义的是关键字的基本性质 - 分配等不起作用是这种性质的结果,而不是原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2022-01-10
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多