“from __future__ import barry_as_FLUFL”是什么意思?

92

我知道这是一个内部玩笑,意味着它会一直保留(就像“from __future__ import braces”一样),但它到底是做什么用的?

3个回答

95

这与PEP 0401: BDFL退休有关。

Barry是指巴里·沃萨,一位知名的Python开发者。 from __future__ import barry_as_FLUFL 基本上将!=运算符替换为<>


22
更重要的是,它可以在Python 3中启用<>语法。 - S.Lott
2
链接显示 print 语句也回来了。 - manojlds
哎呀,当我尝试在Python 3.3上运行这个导入时,它会崩溃并显示SIGSEGV(地址边界错误)。也许这个功能已经没有被维护了。 :P - Jeremy
5
顺便说一句,与括号不同,它在.all_feature_names中,因此如果您决定运行启用了所有未来功能的程序(查看列表并确认它们都是您想要的),它可能会对您造成影响。请注意。 - Michael Scott Asato Cuthbert
5
正如S. Lott所说,它使Python 3中的<>语法成为可能,但也禁用!=运算符。(据我所知,这两个不能同时存在。) - J-L

39

如上所述,barry是Barry Warsaw,一位著名的核心Python开发人员。然而,FLUFL尚未解释。

它代表“Friendly Language Uncle For Life”,是其他Python核心开发人员当时的一个内部玩笑。之所以启用此语法<>,是因为他是最想使用<>运算符的主要人员。


19

四月愚人节的恶作剧PEP 0401非常有趣,它的当前实现也非常好玩。

它可以通过终端交互或使用python3 -i 从标准输入运行,但令人惊讶的是,在没有使用-i或普通脚本中,它不起作用。它通过eval(...)compile(...)这种方式工作:

exec(compile('1<>0', 'foo', 'single', __future__.CO_FUTURE_BARRY_AS_BDFL))
True

1
这是一个很好的答案,因为它解释了在正常脚本中这种方法不“起作用”。但我不确定最后一句话是什么意思?格式和标点符号看起来有点像玩笑,有点像粗心,有点像破坏行为。我无法确定。 - John Y
哦,还有要澄清的是:即使您使用了“-i”,在进入REPL之前执行的脚本必须遵循正常的Python 3语法,否则您将会得到一个语法错误。如果在脚本中出现语法错误,则REPL将表现得好像您从未进行过导入。(您只需在REPL中再次执行导入操作即可,但这违背了首先将其放入脚本中的初衷。)不过,如果脚本引发(大多数?)其他类型的异常,那么导入仍将在您被转储到REPL时生效。 - John Y
有趣,这是预期的行为还是只是一个bug,因为没有人真正关心这个彩蛋? - Andrey Semakin
1
@AndreySemakin 这是一个完美的安全玩笑,看起来像是关于Python未来的假新闻。它不会破坏任何脚本,即使有人尝试导入所有__future__功能也不会。 (我删除了不再是这个彩蛋一部分的文本。) - hynekcer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接