破解python:后缀参数

2024-10-01 17:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在Mathematica,我可以做到

10+10 // Sqrt

返回20的平方根。我正试图用python来做同样的事情。像这样:

^{pr2}$

怎么做的?重写crazy类中的运算符。但这是后缀。根据这个 http://rgruet.free.fr/PQR26/PQR2.6.html#SpecialMethods

当我试图重写任何运算符时,它都是alwyasself <operator> other,所以在前面提到的例子中,我必须对int、string和ton of other-bad这样的类执行此操作。在

有办法吗?我想交换顺序并重新定义other类中的运算符。(为澄清而编辑:other作为参数传递给self类,如下所示:self.\uuOperator\uu(…,other))


Tags: selffreehttp运算符sqrtfr事情后缀
2条回答

您可以将其移植到Python(参见"Hacking Python without Hacking Python")或IPython(参见"Custom Input Transformations")。在

要允许10 + 10 ?? func,您需要??作为低优先级运算符。但是所有Python的低优先级操作符要么很重要(比如and),要么对int有意义(比如|)。 (见Operator Precedence

选项:

  1. 将其作为|插入,看起来像pipe。这将是一个抽象语法树(AST)黑客攻击,可能会破坏使用|的导入库。在
  2. 加入一个新的操作符(但是不要使用//,因为这很重要)。你需要在字符串级别,在AST之前。在

对您来说,充分利用Python和IPython的各种命令,完全跳过烦人的黑客攻击就足够了。在

首先,可以使用Python的幂运算符,而不是使用sqrt。在

(10+10) ** 0.5

接下来,在Python/IPython中,下划线“_”表示“最后的结果”。您可以键入以下内容:

^{pr2}$

(IPython还允许_14Out[14]表示“第14次输入的结果”,而__和{}分别表示“倒数第二个结果”和“第三个到最后一个结果”。)

最后,使用IPython,如果行以斜杠开头,则可以使用不带括号或逗号的函数。(在IPython中输入?以查看更多信息,或转到here。)

In [6]: 10 + 10
Out[6]: 20

In [7]: /sqrt _
Out[7]: 4.47213595499958

也许吧

class WeirdMath:
    def __init__(self,v):
        self.val = v
    def __floordiv__(self,other): #this tells us to apply whatever function to our value
        return other(self.val)

import math
print WeirdMath(10+10) // math.sqrt
print WeirdMath(["a","b","c"]) // " .. ".join

可以满足您需求的是forbiddenfruit$ easy_install forbiddenfruit

^{pr2}$

相关问题 更多 >

    热门问题