将复活节彩蛋分配给变量

Ian*_*ter 1 python python-2.7

是否有可能Python的复活节彩蛋分配一个变量?

理想情况下,我想要尝试的是在文本上尝试各种字符串方法,例如单词"the"出现多少次.

我尝试过以下方法:

import this

long_text = this

print long_text.count('the')
Run Code Online (Sandbox Code Playgroud)

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

...    
Namespaces are one honking great idea -- let's do more of those!
Traceback (most recent call last):
  File "count.py", line 5, in <module>
    print long_text.count('the')
AttributeError: 'module' object has no attribute 'count'
Run Code Online (Sandbox Code Playgroud)

提前致谢.

aba*_*ert 6

this模块中的代码是有意混淆的代码,作为一个笑话,*所以字符串as-is不会直接出现在任何地方.

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

print "".join([d.get(c, c) for c in s])
Run Code Online (Sandbox Code Playgroud)

......这意味着答案是:

text = "".join([this.d.get(c, c) for c in this.s])
Run Code Online (Sandbox Code Playgroud)

当然,这依赖于未记录的,特定于实现的细节,但随后this模块本身是未记录的,特定于实现的细节,通过查看库引用可以看出.


但是,如果你想要一些适用于任何Python实现的东西,它有一个this模块可以打印出来的东西,即使它的实现方式不同(据我所知,这不是一个单独的Python实现......),你总是可以这样做:

old_stdout = sys.stdout
sys.stdout = StringIO.StringIO()
try:
    import this
    text = sys.stdout.getvalue()
finally:
    sys.stdout = old_stdout
Run Code Online (Sandbox Code Playgroud)

但是,请记住,import只在第一次导入时运行代码,因此如果您在同一会话中执行此操作两次,那么您将''第二次结束.


另一个有趣的选择是下载PEP 20并使用您喜欢的HTML解析器解析它以提取文本.但我会离开,作为一个Ë读者xercise.


*如果你想知道,这个笑话是混淆源代码,从头开始重新实现rot13,即使它内置在stdlib中,使用嵌套循环执行它,循环超过65到97而不是字符,循环range(26)为一个之所以你需要多次阅读代码才能理解......所有这些都尽可能地违反了禅宗.请参阅Barry Warsaw的帖子,了解他们在实施时的心态.