【问题标题】:is it possible to add syntax synonym to 'def' in python? [closed]是否可以在 python 中将语法同义词添加到“def”? [关闭]
【发布时间】:2013-01-16 10:46:15
【问题描述】:

我想用 let 代替 def。

我正在寻找以这种方式更改自己代码语法的合理方法。

基本上在 c 中是这样的

#define let def

如何在python中做同样的事情?

【问题讨论】:

  • 你为什么要这个名字?!您至少可以举一些例子说明您正在尝试做什么,以及当您“欺骗”python 时您期望会发生什么?
  • @Heather:那么不,那是不可能的。
  • 你可以下载 python 源并更改语法,对吧?
  • @Heather:也许 Python 不适合你? Python 的哲学是有一种显而易见的方式来做事。让您动态更改语法会破坏这一点。

标签: python syntax metaprogramming


【解决方案1】:

def是python中的关键字,所以不能改成别的。

来自docs

以下标识符用作保留字或关键字 语言,不能用作普通标识符。他们必须是 拼写和这里写的完全一样:

and       del       from      not       while as        elif     
global    or        with assert    else      if        pass      yield
break     except    import    print class     exec      in       
raise continue  finally   is        return def       for       lambda 
try

【讨论】:

  • 好吧,你可以编写自己的解析器并生成字节码。但目前还不清楚 OP 在这里试图做什么。它可以是一个简单的正则表达式,将let propername 转换为def propername。不过我们这里没什么可做的。
  • @MartijnPieters 确实,但这是一个可怕的想法。
  • 那我需要语法同义词来定义
  • @Heather:你不能。不是没有扩展 Python 解析器和编译器。
  • 文档中的引用并没有真正说明不可能有其他可能性。这里的关键是,Python 没有任何形式的宏系统。
【解决方案2】:

#define let def

这在 C 中可以工作,因为它是一个预处理器命令。在这里,您不是在欺骗 C,而是在欺骗阅读您代码的人。

要在 Python 中实现相同的功能,您需要一个预处理器。与 C 一样,您不会欺骗 Python,您只会欺骗读者。

所以你可以编写一个预处理器来启动你的程序。与 C 一样,您将生成一个中间文件,然后“真正的”python 编译器将使用该文件。

我并不是唯一一个认为这不是一个好主意的人。这是支持的噩梦。 有这种偏好,但追随你的人呢?如果您开始乱用关键字,其他人如何维护此代码?

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2023-03-06
    • 2014-08-25
    • 1970-01-01
    相关资源
    最近更新 更多