[英]Python prefix postfix infix, no parentheses
我从Mathematica来到Python。 是否有没有括号的前缀,后缀和中缀运算符(如Python中的Mathematica)?
例如在Mathematica中
Print@@string
string~Join~string
data//Sum
我发现我一直在使用print来测试功能,并且不得不用括号将整个内容包装起来似乎很麻烦并且清理速度很慢。 有没有办法在Python3中使用[i for i in data]//Print
?
Python没有任何后缀运算符,但是如果您真的努力的话,可以使用魔术的r-dunder方法和中缀运算符来模仿它们。
例如,
class PrintType:
def __rfloordiv__(self, other):
print(other)
Print = PrintType()
[1, 2, 3]//Print
您可能仍然需要括号才能获得正确的优先级。
Python在文档中确实有一个运算符优先级表 。 因此,具有较高优先级的操作将首先应用,并且不需要显式括号,例如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选项,以调用不带括号的函数。 在某些情况下,这可能导致歧义,因此默认情况下处于禁用状态。
你也可以开始与线/
有同样的效果 (它只能在IPython中-也见,
和;
自动调用,带自动引号)。
就像在IPython repl中一样,Jupyter单元格中最后一条语句的值将自动显示为输出-您不必在其上调用print
。 对于某些数据类型,例如Pandas数据帧,最好不要这样做。 也可以对其进行配置,以显示同一单元格中多个语句的输出。
您应该尝试在Jupyter中执行的第一个单元是
?
只是一个问号。 这将显示解释IPython功能的在线帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.