把复活节彩蛋分配给变量

2024-10-01 15:42:50 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以将Python复活节彩蛋this分配给一个变量?在

理想情况下,我想做的是在文本上尝试各种字符串方法,比如单词“the”出现了多少次。在

我试过以下方法:

import this

long_text = this

print long_text.count('the')

这将打印出Zen消息,但我看到一个错误,其中使用了count方法:

^{pr2}$

提前谢谢。在


Tags: the方法字符串text文本importcount情况
3条回答

您当前正在将long_text分配给模块this,以获得可以执行的文本:

>>> import this
>>> text = "".join([this.d.get(c, c) for c in this.s])
>>> print text.count('the')
5

实际源代码:

^{pr2}$

只是因为还没人提起过:

from codecs import decode
from this import s

zen = decode(s, "rot13")

this模块中的代码是故意混淆的代码,开玩笑,*因此字符串不会直接出现在任何地方。在

但是,如果您查看源代码(例如print inspect.getsource(this),或查找{a1}),您将看到最后一行是:

print "".join([d.get(c, c) for c in s])

…这意味着答案是:

^{pr2}$

当然,这依赖于未文档化的、特定于实现的详细信息,但是this模块本身就是未文档化的、特定于实现的细节,通过查看the library reference可以看出。在


但是,如果您希望与任何具有this模块的Python实现一起工作,即使它的实现方式不同(据我所知,这不是一个单独的Python实现),那么您可以始终这样做:

^{3}$

但是,请记住,import只在第一次导入时运行代码,因此如果在同一个会话中执行两次,那么第二次将得到''。在


另一个有趣的选择是下载PEP 20,然后用你最喜欢的HTML解析器解析它来提取文本。但我将把它作为练习留给读者。在


*如果你想知道的话,笑话是混淆源代码,从头开始重新实现rot13,即使它是内置在stdlib中的,使用嵌套循环,循环65到97而不是字符,在range(26)上循环的原因是你必须多次阅读代码才能理解……所有这些都违反了禅。请参阅Barry Warsaw's post了解更多关于他们在实施时的心理状态的背景知识。

相关问题 更多 >

    热门问题