我是从 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/