【问题标题】:How turn invalid character identifier into valid如何将无效的字符标识符变为有效的
【发布时间】:2014-12-06 17:56:55
【问题描述】:

我正在尝试执行以下语句:

¬ = lambda x: not x

但我收到以下错误:

  File "<stdin>", line 1
    ¬ = lambda x: not x
    ^
SyntaxError: invalid character in identifier

好的,我知道这在 Python 中是一个无效的句子,但我正在寻找一种允许我使用这种语法的解决方案。

我的目标是创建一个脚本来轻松地运行命题逻辑,如果我能做到,我就可以用糖语法做一些事情,如下所示:

¬ False
>>>True

【问题讨论】:

  • 简短回答:你不能。长答案:不是以可移植的方式,编辑 Python 语法并重新编译,但不要指望您的脚本可以在其他任何地方运行。
  • 你为什么要重新利用 Python 来制作另一种语言?为什么不直接解析输入然后执行结果呢?你可以使用sympy's propositional logic support 来执行。
  • 我只是在学习@MartijnPieters,我不想制作另一种语言或任何关于它的东西,Python 是一种强大的语言,并且有很多好的库和模块,比如你展示的逻辑模块.如果没办法,好的,我明白了,不好意思问了。

标签: python python-3.x syntax lambda


【解决方案1】:

不重写解析器(这不是一个好主意),这在 Python 中是不可能的。变量名只能包含字母、数字和/或下划线。此外,第一个字符必须是字母或下划线。此外,变量名称不能与 ifclass 等关键字相同。

除此之外,名称中不能有其他字符。您同样不能创建自己的关键字或运算符符号(尽管您可以重载自定义类上的大多数现有运算符来做任何您想做的事情。这是一个参考:operator overloading in python)。

有关更多信息,这里是一个指向Python's grammar specification 的链接以及在 Python 中定义 identifiers and keywords 的链接。

另外,为了记录,您可以使用 operator.not_ 而不是创建自己的函数来反转布尔值。

【讨论】:

  • 感谢您的回答,但您说“变量名只能包含字母”,没有办法在字母表中添加更多字符,例如示例“¬”?毕竟 A 和 ¬ 只是一个字符。
  • @ademar111190:是的,通过更改解析器。或者通过更改 Python 编码的 Unicode 标准。
【解决方案2】:

非常感谢您的帮助,@iCodez 已经完美地回答了 python 上下文,但实际上我愿意使用其他可以做到这一点的语言,我在 Ruby 上找到了它,在运行我的 ruby​​ 代码下方想要:

#!/usr/local/bin/ruby
# coding: utf-8

σ = 9
def √(x)
    x**0.5
end
def ¬(x)
    not x
end

puts σ
puts √ σ
puts ¬ false

和输出:

9
3.0
true

再次感谢您的帮助!还要感谢 programmers thread 帮助我找到其他语言。

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多