【问题标题】:Proposal for python syntax - what would go into implemention? [closed]python 语法的建议 - 将实施什么? [关闭]
【发布时间】:2020-10-07 22:04:21
【问题描述】:

我想使用某些关键字和一元/二元运算符作为函数。例如:

_not = lambda a: not a
_plus = lambda a, b: a + b
_or = lambda a, b: a | b

我认为有机会使用更简单的语法,在某些功能设置中看起来会更好:

_not = (not)
_plus = (+)
_or = (|)

右边的表达式无论如何都是无效的,所以为什么不让它们成为那些函数。我认为它对标识 lambda 也很好,也许是 (:),如 (:) = lambda x: x。

所以要提出一个问题:广义上讲,在我的本地安装的 python 上实现这些更改需要什么和/或为什么这是一个糟糕的想法?

干杯

【问题讨论】:

标签: python scripting-language


【解决方案1】:

您在这里尝试做的是覆盖内置范围,

  • 这是一个坏主意,因为您试图覆盖所有 python/过程/面向对象的程序员自然而然地使用的功能和语法。
  • 更重要的是,正如下面的 cmets 中所述,您提到的代码行将引发 syntaxError 异常,这意味着在解释您的 python 代码的二进制“python”程序中的某处,存在确实存在的规则和语法不接受您想要的那种语法,这意味着如果您想要一种以这种方式工作的语言,您必须自己创建它(这需要您了解编译的含义,程序要经过哪些阶段才能成为可执行文件,也许熟悉有助于您完成这项工作的库),或者找到与您想要的类似的其他语言。

如果你真的对回答你的问题感兴趣,我认为你应该检查函数式编程语言,如 LISP,或者尝试查看一个名为 textX 的 python 模块,你可以使用它创建自己的不管你想成为什么样的语言,然后测试这个想法是否和你想象的一样好。

【讨论】:

  • 这是完全错误的。如果只是更改内置插件的问题,那将非常容易,并且不会真正涉及覆盖任何内容。建议的语法与内置名称查找不对应。提出的语法在语法上根本不是 Python 有效的,难点在于改变语法、解析器、字节码编译器等使其成为有效的语法。
  • 问题不在于如何使_not_plus 有意义。这是关于如何让(not)(+) 有意义。
  • 你的意思是让它们具有其他意义
  • 我完全同意,像这样的代码可以工作_not = lambda a: not a,但正如你提到的,在词汇/语法级别上覆盖语法是不可能的,我完全同意。只是我不想使我的答案复杂化并使其令人生畏。这就是为什么我提到 textX 必须完全定义所有这些规则。
【解决方案2】:

在 python 解释器语法分析器 (how they work) 中,某些关键字被视为保留给解释器

例如,让我们考虑有一个名为 def 的变量

这会导致问题,因为python如何知道你是否声明了一个声明变量的函数

要在本地安装中更改此设置,您必须找到 python 的开源文档,找到使用这些关键字的解释过程部分以保留功能,例如将 def 改成 define,这样你仍然可以声明函数

总而言之,仅仅能够拥有一个名为 def 而不是 _def 的 var 比它的价值要麻烦得多

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 2017-01-12
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多