Python 前缀后缀中缀,无括号
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 没有任何后缀运算符,但如果您非常努力地尝试,您可以使用 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)
相同。
您甚至可以将其推广到任意的单参数函数,
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, does have %
magics that extend the native Python syntax somewhat. IPython includes an %autocall 调用不带括号的函数的选项。这在某些情况下可能会导致歧义,因此默认情况下禁用。
你也可以用 /
for a similar effect 开始一行(它只适用于 IPython -- 另见 ,
和 ;
自动调用带自动引号)。
与在 IPython repl 中一样,Jupyter 单元格中最后一条语句的值将自动显示为输出——您不必对其调用 print
。对于某些数据类型,如 Pandas 数据帧,最好不要这样做。也可以将其配置为显示来自同一单元格的多个语句的输出。
您应该尝试在 Jupyter 中执行的第一个单元格是
?
只是一个问号。这将调出解释 IPython 功能的联机帮助。
我从 Mathematica 来到 Python。 Python 中的 Mathematica 中是否有不带括号的前缀、后缀和中缀运算符?
例如在 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)
相同。
您甚至可以将其推广到任意的单参数函数,
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, does have %
magics that extend the native Python syntax somewhat. IPython includes an %autocall 调用不带括号的函数的选项。这在某些情况下可能会导致歧义,因此默认情况下禁用。
你也可以用 /
for a similar effect 开始一行(它只适用于 IPython -- 另见 ,
和 ;
自动调用带自动引号)。
与在 IPython repl 中一样,Jupyter 单元格中最后一条语句的值将自动显示为输出——您不必对其调用 print
。对于某些数据类型,如 Pandas 数据帧,最好不要这样做。也可以将其配置为显示来自同一单元格的多个语句的输出。
您应该尝试在 Jupyter 中执行的第一个单元格是
?
只是一个问号。这将调出解释 IPython 功能的联机帮助。