Python 前缀 后缀 中缀,无括号

标签 python wolfram-mathematica postfix-notation postfix-operator

我是从 Mathematica 转向 Python 的。 Python 中是否有像 Mathematica 那样不带括号的前缀、后缀和中缀运算符?

例如在数学中

Print@@string
string~Join~string
data//Sum

我发现我经常使用 print 来测试函数,并且必须用括号将整个内容括起来似乎很麻烦,而且清理很慢。有没有办法在Python3中使用[i for i in data]//Print

最佳答案

Python 没有任何后缀运算符,尽管您可以使用 magic r-dunder methods 来模仿它们。如果你真的很努力的话,还有中缀运算符。

例如,

class PrintType:
    def __rfloordiv__(self, other):
        print(other)

Print = PrintType()

[1, 2, 3]//Print

不过,您可能仍然需要括号才能获得正确的优先级。

Python 确实有 operator precedence table在文档中。因此,优先级较高的运算将首先应用,并且不需要显式括号,例如10 + 2 * 3 与 Python 中的 10 + (2 * 3) 相同。

您甚至可以将其推广到任意 1 参数函数,

class Slash2:
    def __init__(self, fn):
        self.fn = fn

    def __rfloordiv__(self, other):
        return self.fn(other)

Print = Slash2(print)
Sum = Slash2(sum)

[1, 2, 3]//Sum//Print
# prints "6"
[1, 2, 3]//Slash2(sum)//Slash2(print)  # Same thing.

如果您习惯 Mathematica,我建议使用 Jupyter用于 Python 实验的笔记本,因为您会熟悉细胞范式。

Jupyter 的 Python 内核,IPython ,确实有 % 魔法在某种程度上扩展了原生 Python 语法。 IPython 包括 %autocall调用不带括号的函数的选项。这在某些情况下可能会导致歧义,因此默认情况下处于禁用状态。

您还可以使用 / for a similar effect 开始一行(它仅适用于 IPython - 另请参阅 ; 了解带有自动引号的自动调用)。

与 IPython repl 中一样,Jupyter 单元格中最后一条语句的值将自动显示为输出 - 您不必对其调用 print。对于某些数据类型,例如 Pandas 数据框,最好不这样做。还可以将其配置为显示同一单元格中多个语句的输出。

您应该尝试在 Jupyter 中执行的第一个单元是

?

只是一个问号。这将打开解释 IPython 功能的在线帮助。

关于Python 前缀 后缀 中缀,无括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52901336/

相关文章:

c - 实现 infixToPostfix 方法,但不知道为什么我第一次推送 '('

smalltalk - smalltalk中的后缀计算

java - 二叉树后缀计算器

Python protobuf解码base64字符串

python - 在 Django 中搜索表中的所有字段

documentation - Mathematica : Function Documentation

list - 在 Mathematica 中将列表元素连接成一个数字

python - Tkinter 网格不工作

python - 比较文件和列表以查看它们是否相同

wolfram-mathematica - PlotLegends 使 Manipulate[] 图形缓慢爬行